【发布时间】:2016-05-30 22:31:30
【问题描述】:
我有一个包含铁列表的自定义元素。每个列表项格式化并显示一个对象,每个项目都有一个可单击的<div>,用于删除该项目。列表显示正确。我在“点击”方法中收到点击事件。 'on-click' 方法使用拼接来移除项目。从我的代码中可以看出,我在拼接前后记录了 listData 属性(我的项目)。当我删除任何项目时,listData 会正确更新。但是,已移除的项目仍会显示,并且列表末尾的项目实际上已从显示中移除,而不是所需的项目。我尝试了一些我见过的东西(不多),包括 Polymer 文档中的一些东西,但没有运气。有人可以帮忙吗?这是元素,减去了很多“绒毛”。
<dom-module id="cnid-list">
<template>
<style include="cnid-list-style"></style>
<iron-list id="callerList" items="[[listData]]" as="item">
<template>
<div class="recents-list">
<div id="{{index2id(item.index)}}" on-click="onClickedItem"></div>
</div>
</template>
</iron-list>
</template>
<script>
Polymer({
is: 'cnid-list',
properties: {
carrier: String,
listData: { type: Array,
value: function() { return []; }
}
},
ready: function() {
console.log('cnid-list ready');
myArray = getMyArray(); // returns an array of objects
this.listData=myArray;
for(var i = 0; i < this.listData.length; i++) {
this.listData[i].index = i;
}
},
index2id: function(index) {
return "_" + index;
},
id2index: function(id) {
return Number(id.substr(1));
},
onClickedItem: function(e) {
for(var i = 0; i < this.listData.length; i++) {
console.log('on-click list item before: ', this.listData[i]);
}
idx = this.id2index(e.target.getAttribute('id'));
console.log('index is ' + idx);
Polymer.dom(this.root).querySelector('#callerList').splice('items', idx, 1);
for(var i = 0; i < this.listData.length; i++) {
console.log('on-click list item after: ', this.listData[i]);
}
}
});
</script>
</dom-module>
【问题讨论】:
-
为什么你在
Polymer.dom(this.root).querySelector('#callerList').splice('items', idx, 1)上使用.splice()而不是this.list.data?你应该使用polymer-project.org/1.0/docs/devguide/… 而不是splice()