我如何使用 Polymer 1.2.4 的 iron-list 一次删除和取消选择多个项目?
How can i delete and deselect multiple items at once using an iron-list for Polymer 1.2.4?
我有一个 iron-list,我想在其中提供 select 多个项目的选项并立即删除它们。这是我的 iron-list
和 multi-selection
:
<iron-list items="[[users]]" as="user" selected-items="{{selectedUsers}}" multi-selection>
...
</iron-list>
我为 selected 项目数组使用了 forEach 循环:
_deleteSelected: function(e) {
this.selectedUsers.forEach(function(user) {
var index = this.users.indexOf(user);
if (index != -1) {
this.splice('users', index, 1);
}
}, this);
this.querySelector('iron-list').clearSelection();
console.log(this.selectedUsers);
}
在每个循环中,我计算项目在主项目数组中的索引,然后我使用 this.splice('items', index, 1)
删除它。循环结束后,我使用此 this.querySelector('iron-list').clearSelection();
清除我的 selections 并继续前进。但是我的迭代失败了,因为循环似乎只 运行 一次,无论我有多少项目 selected。如果我 select 只有一项,则它会被正确删除并刷新列表。但是这里发生了一些奇怪的事情,因为现在与我刚刚删除的索引具有相同索引的项目似乎已被选中。例如我有三个项目,我 select 第二个并删除它。现在第二个是之前第三个但似乎无缘无故被检查的项目,而 selected 项目数组是空的。我想这些是因为 Polymer 使用的数组参考。我如何解决 iron-list selections 中的这种行为?有没有办法只使用拼接而不必清除 selected 项目数组?
我的完整组件示例是 here。
所以问题是你运行 for 循环在
this.selectedUsers
所以你在这个数组上 运行 然后从 this.users 中删除用户所以现在熨斗设置 this.selectedUsers 为 [] 因为列表是新的。
我的解决办法是这样写
this.selectedUsers.slice().forEach(function(user) { ...
因此它创建了新数组,然后这个数组不会改变,因为 this.users 改变了
怎么样 -
this.users = this.users.filter(函数(u){
return (this.selectedUsers.indexOf(u) == -1);
});
我有一个 iron-list,我想在其中提供 select 多个项目的选项并立即删除它们。这是我的 iron-list
和 multi-selection
:
<iron-list items="[[users]]" as="user" selected-items="{{selectedUsers}}" multi-selection>
...
</iron-list>
我为 selected 项目数组使用了 forEach 循环:
_deleteSelected: function(e) {
this.selectedUsers.forEach(function(user) {
var index = this.users.indexOf(user);
if (index != -1) {
this.splice('users', index, 1);
}
}, this);
this.querySelector('iron-list').clearSelection();
console.log(this.selectedUsers);
}
在每个循环中,我计算项目在主项目数组中的索引,然后我使用 this.splice('items', index, 1)
删除它。循环结束后,我使用此 this.querySelector('iron-list').clearSelection();
清除我的 selections 并继续前进。但是我的迭代失败了,因为循环似乎只 运行 一次,无论我有多少项目 selected。如果我 select 只有一项,则它会被正确删除并刷新列表。但是这里发生了一些奇怪的事情,因为现在与我刚刚删除的索引具有相同索引的项目似乎已被选中。例如我有三个项目,我 select 第二个并删除它。现在第二个是之前第三个但似乎无缘无故被检查的项目,而 selected 项目数组是空的。我想这些是因为 Polymer 使用的数组参考。我如何解决 iron-list selections 中的这种行为?有没有办法只使用拼接而不必清除 selected 项目数组?
我的完整组件示例是 here。
所以问题是你运行 for 循环在
this.selectedUsers
所以你在这个数组上 运行 然后从 this.users 中删除用户所以现在熨斗设置 this.selectedUsers 为 [] 因为列表是新的。
我的解决办法是这样写
this.selectedUsers.slice().forEach(function(user) { ...
因此它创建了新数组,然后这个数组不会改变,因为 this.users 改变了
怎么样 -
this.users = this.users.filter(函数(u){ return (this.selectedUsers.indexOf(u) == -1); });