dart - 在 Dart 中以编程方式通知 Observable-Watchers

标签 dart polymer observers

再一次,与 Dart/Polymer 相关的问题。

我想使用 Parse.com JavaScript 库,但由于它在 Dart 中不可用,我编写了 Wrapper 类,它存储一个 JsObject 并将所有来自 Dart 的调用委托(delegate)给相应的 JavaScript 对象。基本上它就像一个代理。

你猜怎么着,它工作得很好。

但是,我的观察结果没有。要理解这一点,您必须查看我的“代理”类之一的以下结构。

class ParseObject extends Observable {

   JsObject _jsDelegate = new JsObject(context['Parse']['ParseObject']);

   void set(String key, dynamic value) {
      _jsDelegate.callMethod('set', [key, jsify(value)];
   }

   dynamic get(String key) {
      return dartify(_jsDelegate.callMethod('get', [key]));
   }

}

我的 Polymer Element 的 HTML 代码如下所示:
<div>Name: {{project.get('name')}}</div>

由于数据绑定(bind)仅在方法参数更改的情况下进行评估,因此它永远不会更新,因此即使名称更改,旧的名称仍将保留。

我想出的解决方案是将用户在 ParseObject#set(String, dynamic) 方法中设置的所有值存储到一个可观察的 Map 中。这可行,但我认为它很脏,因为我必须确保两个 Maps,Dart 中的一个和 ParseObject 的 JavaScript 表示中的一个相等。

因此,我正在寻找一个更好的解决方案,并且我想到了某种方法来告诉 Polymer 重新评估它的数据绑定(bind)。

是否存在这种方法或是否有任何其他可能性来解决这个问题?

最佳答案

扩展 observable 本身什么也不做。
您需要使用 @observable 注释 setter/getter (如果你没有使用 Polymer,你还需要将 observable 转换器添加到 pubspec.yaml)。您不能使函数可观察(这适用于 Polymer 元素,但不适用于 Observable 模型类。有关可观察的更多详细信息,请参见例如 Implement an Observer pattern in DartDart: @observable of getters

关于dart - 在 Dart 中以编程方式通知 Observable-Watchers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29703042/

相关文章:

dart - 如何递归调用方法而不传递传递的参数?

ios - NotificationCenter 没有调用选择器

dart - 如何在 Flutter 中将多个小部件作为子级传递?

android - Android Studio 在 Debug模式下看到我的 Iphone 连接时出错

javascript - polymer 图标和纸张图标未显示

javascript - NEON 动画动画结束事件?

javascript - Polymer "animate"函数在 Chrome 中不再工作

javascript - Ember Array 观察器不工作

swift - 如何快速将属性观察器添加到 NSProgress?

websocket - dart 聊天服务器示例,从另一台机器连接