Я изучаю Polymer. Я пытаюсь связать массив с моим пользовательским интерфейсом. Каждый объект в массиве имеет свойство, которое изменится. Мне нужно, чтобы мой пользовательский интерфейс обновлялся при изменении значения свойства. Я определил мой полимерный компонент следующим образом:Связывание данных с массивом в полимере
мой-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. – Srik