Javascript 如何向所有元素实例通知数组变异
我想要一个聚合元素,它与所有实例共享一个数组。如果我不使用函数来实例化数组,这是可能的。这个很好用。但是,当我使用这个.push(“ArrayPath”,Value)更改数组元素时,只会通知当前实例,而不会通知所有实例。我想要做的是有一个计算布尔属性,它监听数组的变化,我有:Javascript 如何向所有元素实例通知数组变异,javascript,arrays,polymer,polymer-1.0,web-component,Javascript,Arrays,Polymer,Polymer 1.0,Web Component,我想要一个聚合元素,它与所有实例共享一个数组。如果我不使用函数来实例化数组,这是可能的。这个很好用。但是,当我使用这个.push(“ArrayPath”,Value)更改数组元素时,只会通知当前实例,而不会通知所有实例。我想要做的是有一个计算布尔属性,它监听数组的变化,我有: Polymer({ is: 'data-holder', properties: { editedFields: { type: Ar
Polymer({
is: 'data-holder',
properties: {
editedFields: {
type: Array,
notify: true,
value: []
},
unsaved: {
type: Boolean,
notify: true,
reflectToAttribute: true,
computed: '_isUnsaved(editedFields.*)'
}
},
_isUnsaved: function(array) {
return (array.base.length > 0) ? true : false;
},
_addItem: function(value) {
this.push("editedFields", value);
},
....
好的,到目前为止还不错。使用_addItem函数,我向editedFields数组添加一个项,然后调用我的_isunsave函数。这很好。但这只在我调用_addItem方法的实例中调用。数组“editedFields”在所有实例中都已更改,但“unsaved”属性仅在当前实例中得到通知
如何管理它以使所有实例都侦听阵列更改?所以所有实例都将属性“unsave”添加到元素声明中
顺便说一句,_addItem方法的值参数是一个确保唯一性的对象您是否阅读了thank you@Supersharp,我已经看到了,它似乎是一个很好的解决方案。但我仍然想知道,如果没有您的行为实现,为什么这不起作用。您可以使用一个函数初始化数组值,该函数使数组实例唯一,并且不会在所有实例上共享。但是,当我不使用某个函数时,数组已经被共享了,那么为什么不通知它呢。否则,默认情况下从polymer.ok共享阵列数据是没有意义的,可能是因为我使用了this.push,其中这是当前实例。所以,如果没有可能制造出聚合物、碱、推力之类的东西,我认为你的解决方案是最好的。。。但也许有些人比我更了解:)这不是我的解决方案:-)我的解决方案是使用一个简单的订阅者/发布者或观察者/可观察的设计模式…啊,对不起,忽略了它:)是的,“alesc”解决方案在理论上也是一个简单的订阅者/发布者模式。。。只是作为行为更方便一点。谢谢你的提示@Supersharp