【发布时间】:2015-10-19 17:00:40
【问题描述】:
我正在学习Polymer。我正在尝试将数组绑定到我的 UI。数组中的每个对象都有一个会改变的属性。当属性值更改时,我需要更新我的 UI。我将我的 Polymer 组件定义如下:
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元素。 - 第一项在列表中呈现。但是,第二个没有。
- 当我单击“测试”按钮时,状态更新不会反映在屏幕上。
当我查看所有内容时,我觉得它是正确的。但是,从行为中可以清楚地看出数据绑定没有正确设置。我究竟做错了什么? items.length 和数组中所有项目的初始渲染让我很困惑。
【问题讨论】:
-
你应该使用它。访问您的属性时的前缀。应该是this.items.length和this.items[i].name等。你检查名字的方式不对,你应该检查this.items[i].name。
标签: javascript polymer