通过双向数据绑定更改地图中的元素时收到通知

时间:2015-03-25 13:33:34

标签: data-binding dart polymer dart-polymer

因此,如果我将两个简单的变量与聚合物中的双向数据绑定绑定,它们会自动更新。

但我注意到地图和列表的行为有所不同。更改Map或List中的Element不会更新绑定变量,只能使用= Operator或notifyPropertyChange触发更新。

我的问题是我有两个元素E1和E2。 E1是E2的父母。

// E1.dart
class E1 extends PolymerElement {
  @observable List<Map> data;

  dataChanged() => print(data.toString());
}

//E1.html
<...>
   <template repeat="{{map in data}}">
      <E2 value="{{map[identifier]}}"></E2>
   </template>
</...>

因此,如果E2内部的值发生变化并且我手动打印数据,则该值也会发生变化。但是dataChanged()函数永远不会被调用。当内部值发生变化时,我想在数据上调用notifyPropertyChange(#data,x,y)。有没有办法获得列表内部变更的通知?

我的列表如下所示:

[
  { identifier : {x1 : y1}},
  { identifier : {x2 : y2}},
  { identifier : {x3 : y3}},
  { identifier : {x4 : y4}} 
]

我想要通知的更改是x和y,以及是否添加了新元素。标识符总是相同的。

1 个答案:

答案 0 :(得分:1)

您可以使用ObservableList或ObservableMap代替常规List或Map。您还可以通过在调用toObservable时包装现有List或Map来自动创建它们。例如:

@observable ObservableList<Map> data = toObservable([1, 2, 3]);

这些类型/功能由聚合物导出,因此您不需要添加任何导入。