聚合物中数据绑定到阵列
Data Binding to Array in Polymer
我正在学习高分子。我试图绑定一个数组到我的UI。数组中的每个对象都有一个会改变的属性。我需要我的UI在属性值改变时更新。我已经定义了我的聚合物组件如下:
my-component.html
<dom-module id="my-component">
<template>
<h1>Hello</h1>
<h2>{{items.length}}</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr repeat="{{ item in items }}">
<td>{{ item.name }}</td>
<td>{{ item.status }}</td>
</tr>
</tbody>
</table>
<br />
<button on-click="testClick">Test</button>
</template>
<script>
// element registration
Polymer({
is: "my-component",
properties: {
items: {
type: Array,
value: function() {
return [
new Item({ name:'Tennis Balls', status:'Ordered' }),
new Item({ name:'T-Shirts', status: 'Ordered' })
];
}
}
},
testClick: function() {
for (var i=0; i<items.length; i++) {
if (items.name === 'Tennis Balls') {
items[i].status = 'Shipped';
break;
}
}
}
});
</script>
</dom-module>
组件呈现。但是,这些绑定根本不起作用。
-
{{ items.length }}
行不显示计数。它基本上只是一个空的h2
元素。 - 在列表中渲染第一项。然而,第二个没有。
- 当我点击Test按钮时,状态的更新不会反映在屏幕上。
当我看一切的时候,对我来说都是正确的。但是,从行为中可以清楚地看出,数据绑定没有正确设置。我做错了什么?事实上,items.length
和数组中所有项目的初始渲染让我真的很困惑。
聚合物数据绑定系统是这样工作的:
如果声明的属性发生变化(例如添加一个新项),那么它将检测到变化并更新您的DOM。
然而,聚合物不会监控内部属性的变化(出于性能/兼容性原因)。
你需要通知Polymer你的属性改变了。您可以使用set方法或notifyPath来做到这一点。
E。g(来自聚合物数据绑定部分)
this.set('myArray.1.name', 'Rupert');
如果你想在数组更新时做点什么,你也可以添加一个观察者
聚合物1.0特性文档
我认为你还应该给你的属性添加一个notify:true
items: {
type: Array,
notify:true,
value: function() {
return [
new Item({ name:'Tennis Balls', status:'Ordered' }),
new Item({ name:'T-Shirts', status: 'Ordered' })
];
}
}
相关文章:
- 在VanillaJS中模拟模型双向数据绑定
- Telerik rad组合框多列数据绑定
- 数据绑定:'系统Char'不包含名为'xxxxx'
- OnsenUI AngularJS数据绑定无法正常工作
- Ionic-item在导航栏中进行双向数据绑定
- 基本D3.js:如何将具有其他属性的数据绑定到元素
- 使用自定义数据属性或将数据绑定到处理程序来处理事件
- ListView的ItemTemplate内的自定义HtmlControl的数据绑定失败
- $http中的Angular 1数据绑定承诺不起作用
- 在何处和何时添加具有数据绑定的元素
- 使用AngularJs数据绑定的三元运算符显示图像
- 为什么针对工厂的Angular数据绑定只适用于函数
- 敲除:如何使用可见数据绑定可见来隐藏段落标记
- 在数据绑定中使用对象敲除绑定
- 如何在angularjs中检查Kendo树视图数据绑定事件
- 将json数据绑定到剑道网格
- AngularJS数据绑定中断ngRepeat+奇怪行为
- 聚合物 1.x:数据绑定阵列
- 聚合物中数据绑定到阵列
- 聚合物使用阵列进行数据绑定