我如何使用 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-listmulti-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); });