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



再一次,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]));
}
}

我的聚合物元素的HTML代码如下:

<div>Name: {{project.get('name')}}</div>

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

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

因此,我正在寻找一个更好的解决方案,并想出某种方法来告诉Polymer重新评估其数据绑定。

是否存在这样的方法,或者是否有其他可能性来解决这个问题?

扩展observable本身还没有任何作用。你需要用@observable来注释getters(如果你没有使用Polymer,你还需要将observable transformer添加到pubspec.yaml中)。你不能让函数变得可观察(这在Polymer元素中有效,但在Observable模型类中无效。有关可观察的更多详细信息,请参阅例如在Dart或Dart中实现Observer模式:@observable of getters

最新更新