Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何向所有元素实例通知数组变异_Javascript_Arrays_Polymer_Polymer 1.0_Web Component - Fatal编程技术网

Javascript 如何向所有元素实例通知数组变异

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

我想要一个聚合元素,它与所有实例共享一个数组。如果我不使用函数来实例化数组,这是可能的。这个很好用。但是,当我使用这个.push(“ArrayPath”,Value)更改数组元素时,只会通知当前实例,而不会通知所有实例。我想要做的是有一个计算布尔属性,它监听数组的变化,我有:

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