当地图中的元素通过双向数据绑定发生更改时得到通知

Get notified when an Element inside a Map changes by Two-Way-Databinding

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

但我注意到地图和列表的行为不同。更改 Map 或 List 内部的元素不会更新绑定变量,仅使用 = 运算符或 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,以及是否添加了新元素。标识符总是相同的顺便说一句。

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

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

这些 types/functions 由聚合物导出,因此您不需要添加任何导入。