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