【发布时间】:2015-12-09 15:09:58
【问题描述】:
我正在学习 Polymer。一个挑战我的项目是更新数组的项目。我希望有一个 Polymer 的 CDN,这样我就可以组装一个小提琴。不过现在,我有一个这样定义的元素:
my-element.html
<dom-module id="my-element">
<button on-click="onLoadData">Load Data</button>
<button on-click="onTest1Click">Test 1</button>
<button on-click="onTest2Click">Test 2</button>
<template is="dom-repeat" items="[[ data ]]" as="element">
<div><span>[[ element.id ]]</span> - <span>[[ element.status ]]</span></div>
<template is="dom-repeat" items="[[ element.children ]]" as="child">
<div> <span>[[ child.id ]]</span> - <span>[[ child.status ]]</span></div>
</template>
</template>
</template>
<script>
Polymer({
is: 'my-element',
properties: {
data: {
type: Array,
value: function() {
return [];
}
}
},
onLoadData: function() {
// Generate some dummy data for the sake of illustration.
for (var i=1; i<=3; i++) {
var element = {
id: i,
state: 'Initialized',
description: ''
};
element.children = [];
for (var j=1; j<=5; j++) {
var child = {
id: i + '-' + j,
state: 'Initialized',
description: ''
}
element.children.push(child);
}
data.push(element);
}
},
// Setting an individual property value works
onTest1Click: function() {
this.set('data.0.children.0.state', 'data set');
},
// Setting an entire object value does NOT work.
onTest2Click: function() {
var c = this.data[0].children[0];
c.state = 'data set';
this.set('data.0.children.0', c);
}
});
</script>
</dom-module>
由于某种原因,如果我更新数组元素的属性值(如onTest1Click 所示),UI 会正确更新。但是,如果我更新整个元素(如 onTest2Click 所示),则 UI 不会更新。在我真正的问题中,我正在更新一个元素的多个属性。出于这个原因,我试图更新一个数组元素而不仅仅是一个属性。我做错了什么或误解了什么?或者,我是否必须单独更新每个属性值?
【问题讨论】:
-
您可以使用 polygit 作为 "CDN" 来设置 JSBIN,例如:jsbin.com/nemire/edit?html,output
标签: polymer