Polymer 阵列突变时未更新聚合物数据绑定

Polymer 阵列突变时未更新聚合物数据绑定,polymer,polymer-1.0,Polymer,Polymer 1.0,我注意到Polymer中的模板/数据绑定似乎不能反映数组属性发生变化时的情况(即push())。示例代码如下: [我的元素] myArray:[[JsonString(myArray)]] 推送阵列 集合数组 (功能注册表项(){ 聚合物({ 是‘我的元素’, 特性:{ myArray:{ 类型:数组, 值:函数(){ 返回[]; } } }, pushArray:函数(值){ this.push('myArray',{id:value}); }, setArray:函数(值){ set('m

我注意到Polymer中的模板/数据绑定似乎不能反映数组属性发生变化时的情况(即
push()
)。示例代码如下:


[我的元素]
myArray:[[JsonString(myArray)]]
推送阵列
集合数组
(功能注册表项(){
聚合物({
是‘我的元素’,
特性:{
myArray:{
类型:数组,
值:函数(){
返回[];
}
}
},
pushArray:函数(值){
this.push('myArray',{id:value});
},
setArray:函数(值){
set('myArray',[{id:value}]);
},
JSONSTRIGFY:函数(obj){
返回JSON.stringify(obj);
}
});
})();
函数数组(){
var elm=document.querySelector(“#elm”);
elm.pushArray(“Push”);
}
函数setArray(){
var elm=document.querySelector(“#elm”);
elm.setArray('Set');
}

每当我点击
pushArray
按钮时,应该在
myArray
中添加一个项目“Push”,但它没有反映在模板
[[jsonStringify(myArray)]]
中。这是预期的行为吗?无论如何,要解决这个问题?

数组更改观察器有点棘手。在代码中,通过使用
myArray
,可以隐式地(仅)观察(整个)数组的引用,该引用仅在运行
setArray
时更改

为了克服这个问题,您还必须使用深度观察者,即
myArray.*
。因此,
dom模块的正确代码如下所示:


[我的元素]
myArray:[[jsonStringify(myArray,myArray.*])]
现场演示:


没有其他的代码更改是必要的。

我想通过使用Polymer的
push()
(而不是JS native
push()
)已经可以观察到
myArray
更改了吗?我漏掉什么了吗?你什么都没漏掉。您确实需要使用Polymer的
push()
,否则即使是我的解决方案也无法工作。但正如我所说,数组突变不会触发数组对象本身的更改,因此必须使用其他选项:深度观察者
myArray.*
、数组长度观察者
myArray.length
、或拼接观察者
myArray.拼接
  <dom-module id="my-element">
    <template>
      <pre>
        [my-element]
        myArray: [[jsonStringify(myArray, myArray.*)]]
      </pre>
    </template>
  </dom-module>