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

时间:2015-04-17 15:10:59

标签: dart polymer observers

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

我想使用Parse.com JavaScript库,但由于它在Dart中不可用,我编写了Wrapper类,它存储JsObject并将所有来自Dart的调用委托给相应的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>

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

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

因此,我正在寻找更好的解决方案,我想到某种方法告诉Polymer重新评估它的数据绑定。

这种方法是否存在或是否存在其他可能解决此问题的方法?

1 个答案:

答案 0 :(得分:2)

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