聚合物重复模板双向数据绑定
Polymer repeat template bidirectional data binding
我正在尝试构建一个WebComponent,您可以在其中使用Polymer javascript框架编辑数组中的项目。模型到 DOM 绑定工作正常,但 DOM 到 模型不能 - 简化示例:
<polymer-element name="rep-test">
<template>
<template repeat="{{item in items}}">
<input type="text" value="{{item}}" placeholder="changes don't work!">
</template>
<button on-click="{{add}}">Add</button>
{{items}}
</template><script>
Polymer({
ready: function() { this.items = [] },
add: function() { this.items.push('') },
itemsChanged: function() { console.log(this.items) } // debug
})
</script>
</polymer-element>
<rep-test></rep-test>
items
正确显示在input
元素中,但是当我更改input
中的值时,更改不会反映到模型中(items
)。绑定仅在一个方向上工作。
有没有办法使绑定是双向的,以便在DOM中发生更改时,将其复制到模型中?
我已经看过这个可以达到这种效果的待办事项演示,但它是通过与项目更改关联的自定义事件来实现的。这显然有效,但我正在寻找一种更具声明性的方式来使用绑定来做到这一点。
由于数组元素的变化不会反映到itemsChanged
,我建议您监听输入更改:
<!-- ⇓⇓⇓⇓⇓⇓⇓⇓⇓ -->
<input type="text" on-change="{{ itemChanged }}"
value="{{item}}" placeholder="changes don't work!">
[...]
<!-- inside script -->
itemChanged: function(e) {
console.log(e.path[0].value)
}
以下是工作示例的链接:http://plnkr.co/edit/sZYHeMuAVB0G1muHhFNK?p=preview
下面是双向绑定的示例: 当您更改输入字段中的值时,模型将更新:
普伦克
Follow data changes:
<br>
{{testData.employees[0].firstName}}
<br>
{{testData.employees[3].firstName}}
<br><br>
<template repeat="{{person in testData.employees}}">
{{person.firstName}}
<input type="text" value="{{person.firstName}}">
<br>
</template>
我将引用这篇文章,因为它解释了它如何更好地工作,然后我可以:
"...如果更改数据值,则新值对所有其他实例不可用 - 因为实例变量只是引用字符串的副本。通过使用具有数据属性的对象,如上面的编辑版本所示,并且只读取和分配给该对象的数据属性,而不是覆盖对象本身,更改的值可以在实例之间共享。
相关文章:
- 聚合物 - 在重复模板中获取数据绑定属性值
- 聚合物数据绑定:如何访问嵌套模板中的数据
- 聚合物数据绑定铁 AJAX 并在控制台中访问获取的 JSON
- 聚合物重复模板双向数据绑定
- 聚合物 1.x:数据绑定阵列
- 聚合物将数据绑定到加载了 innerHTML 的元素
- 聚合物.js嵌套组件中的数据绑定
- 用于模板数据绑定的聚合物回调
- 将数据绑定到聚合物中的内容元素
- 聚合物:与简单数据绑定相比;t在第二个元素中起作用
- 聚合物网络组件数据绑定一个js对象/数组
- 聚合物中数据绑定到阵列
- 同步聚合物1.0元素之间的数据绑定
- 聚合物中的数据绑定
- 聚合物,在构造函数中使用属性数据绑定
- 聚合物属性没有通过数据绑定更新
- 使用数据绑定的聚合物芯-支架变更工具
- 在聚合物中注入html,包括数据绑定
- 聚合物+需求:在聚合物升级元素之前,对属性进行数据绑定
- 聚合物使用阵列进行数据绑定