当地图中的元素通过双向数据绑定发生更改时得到通知
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 由聚合物导出,因此您不需要添加任何导入。
因此,如果我在聚合物中使用双向数据绑定绑定两个简单变量,它们会自动更新。
但我注意到地图和列表的行为不同。更改 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 由聚合物导出,因此您不需要添加任何导入。