聚合物 - 如何将观察者附加到数组?

时间:2014-07-08 18:48:35

标签: javascript polymer

如何将观察者附加到作为数组的聚合物属性?要清楚,我希望在数组中的项更改时进行回调。为简单起见,我们说我的数组是:

[
    { text: 'foo' },
    { text: 'bar' }
]

我想要类似的东西:

observe : {
    'items.text' : 'itemsChanged'
}

以下作品,但显然不可持续:

observe : {
    'items[0].text' : 'itemsChanged',
    'items[1].text' : 'itemsChanged'
}

请注意,在我的情况下,更改来自我控制的另一个聚合物元素。因此,如果我能够以某种方式触发对具有{ text: 'foo' }控制权的元素的更改,那么这也会有效。

3 个答案:

答案 0 :(得分:3)

要清楚,Polymer会自动观察Arrays,但是一个' ArrayObserver'只会告诉您(a)数组本身是否被替换或(b)项目是否被添加,删除或重新排列。就像观察对象一样,Polymer不会自动观察子对象的属性。

  
    

这些变化来自我控制的另一种聚合物元素

  

通常就是这种情况,我们通常会让改变火的元素成为沟通的事件。

答案 1 :(得分:0)

有点晚了,但因为谷歌上的问题排名相当高,而且以上都没有真正帮助,这是我的解决方案:

聚合物附带observe.js,这有助于解决您的问题。

基本版本将使用ArrayObserver,但这只会在数组被更改时触发,这意味着添加,删除元素时,我也会在更换条目时猜测。但是,如果您想观察数组中对象属性的更改(例如在您的情况下),这将无济于事。

最好使用CompoundObserver并通过addPathaddObserver(new PathObserver(obj, '...'))添加所有路径。但是你必须迭代整个数组并在循环中添加所有观察到的属性。

答案 2 :(得分:0)

有这方面的文档

Observe array mutations