我正在尝试观察传递给Polymer元素的对象数组的更改。将新项添加到数组时,也会在Polymer元素中更改该数组。但是,永远不会调用观察者方法。
包含元素
<dom-module is="table-container">
<template>
<selectable-table table-items="{{items}}"></selectable-table>
<button on-click="addItem">Add Item</button>
</template>
<script>
Polymer({
is : "table-container",
attached : function() {
this.items = [];
for (var i = 0; i < 3; i++) {
this.push("items", {
numerical: "1",
english: "one"
});
}
},
addItem : function() {
this.push("items", {
numerical: "3",
english: "three"
})
}
})
</script>
</dom-module>
试着在这里观察变化:
<dom-module id="selectable-table>
<template>
<div>{{tableItems}}</div>
</template>
<script>
Polymer({
is : "selectable-table",
properties : {
tableItems: {
type: Object,
notify: true,
observer: "updateTableItems"
}
}
updateTableItems : function() {
// Updates here
}
});
</script>
</dom-module>
首先在第一次填充items数组时调用“updateTableItems”方法,但是在单击该按钮以添加更多对象时从不调用它。
答案 0 :(得分:8)
要观察对数组的更改,请使用以下样式的观察者。
Polymer({
is : "selectable-table",
properties : {
tableItems: {
type: Array,
notify: true,
}
},
observers: [
'updateTableItems(tableItems.*)'
],
updateTableItems : function() {
// Updates here
}
});
因为tableItems
是一个对象数组,所以您应该在属性声明中使用类型Array
。如果将新数组实例分配给tableItems
属性,则仅使用的观察者类型将触发。对于数组的操作,请将回调添加到observers
。您可以在docs。