Polymer 动态添加的项不会触发观察者
我正在使用数组变异方法向数组中添加一些项。这些项目显示在Polymer 动态添加的项不会触发观察者,polymer,polymer-1.0,Polymer,Polymer 1.0,我正在使用数组变异方法向数组中添加一些项。这些项目显示在中,可以动态编辑。虽然编辑确实会更改对象中的数据,但任何附加的观察者都不会激发以指示发生了更改 tl;dr 我正确地使用数组变异方法来推送项目 我正在dom重复中显示项目 这些项目使用显示,子属性名称显示在中,可以在其中动态修改 <template> <template is="dom-repeat" items="[[data.contents]]"> <paper-input val
中,可以动态编辑。虽然编辑确实会更改对象中的数据,但任何附加的观察者都不会激发以指示发生了更改
tl;dr
我正确地使用数组变异方法来推送项目
我正在dom重复中显示项目
这些项目使用
显示,子属性名称
显示在
中,可以在其中动态修改
<template>
<template is="dom-repeat" items="[[data.contents]]">
<paper-input value="{{item.name::input}}"></paper-input>
</template>
</template>
笔记
请注意:
- 通过直接
更改项目,如下所示:this.set()
this.set(“data.contents.0.name”,“Foo”)
会很好地触发观察家
以上各项的MCVE。
如何使用:
- 按下按钮将某些项目推送到
阵列
- 编辑任何一个添加的项目
- 控制台应该记录在任何项目中发生的更改(它不会)
推送阵列
HTMLImports.whenReady(函数(){
“严格使用”;
聚合物({
是:“x-示例”,
特性:{
数据:{
类型:对象,
价值:{
目录:[]
}
}
},
观察员:[
“日志更改(数据。*)”
],
pushItem:function(){
这个.push(“data.contents”{
id:1,
名称:“修改此文本不会触发观察者”
})
},
logChange:function(){
日志(“发生了更改!”);
}
});
});
此处解决:
观察者没有触发,因为items属性上有单向绑定注释,这会阻止更改通知向上流动到元素。将其更改为:items=“{data.contents}}”,您将看到更改
本质上,这是:
<template is="dom-repeat" items="[[data.contents]]">
<paper-input value="{{item.name::input}}"></paper-input>
</template>
对此
<template is="dom-repeat" items="{{data.contents}}">
<paper-input value="{{item.name::input}}"></paper-input>
</template>
此处解决:
观察者没有触发,因为items属性上有单向绑定注释,这会阻止更改通知向上流动到元素。将其更改为:items=“{data.contents}}”,您将看到更改
本质上,这是:
<template is="dom-repeat" items="[[data.contents]]">
<paper-input value="{{item.name::input}}"></paper-input>
</template>
对此
<template is="dom-repeat" items="{{data.contents}}">
<paper-input value="{{item.name::input}}"></paper-input>
</template>
也许您可以将数据类型更改为数组而不是对象也许您可以将数据类型更改为数组而不是对象