2016-02-14 23 views
0

我有一个铁列表,我想提供选项来选择多个项目并一次删除它们。这是我iron-listmulti-selection:对所选项目数组如何使用聚合物1.2.4的铁清单一次性删除和取消选择多个项目?

<iron-list items="[[users]]" as="user" selected-items="{{selectedUsers}}" multi-selection> 
... 
</iron-list> 

我已经使用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();来清除我的选择并继续前进。但是我的迭代失败了,因为循环似乎只运行一次,无论我选择了多少项。如果我只选择一个项目,那么它会被正确删除,并且列表会被刷新。但是这里发生了一些奇怪的事情,因为现在有一个索引与我刚删除的索引相同的项目似乎已被检查。例如,我有三个项目,我选择第二个并删除它。现在第二个是以前的第三个项目,但似乎没有任何理由被检查,而所选项目数组是空的。我猜这些是因为Polymer使用的数组引用而发生的。我怎样才能解决铁列表选择这种行为?有没有办法只使用拼接,而不必清除选定的项目数组?我的完整组件示例是here

回答

0

所以,问题是,你在

this.selectedUsers 

运行for循环,所以你在这个阵列上运行,然后删除this.users用户因此现在的铁杆this.selectedUsers为[因为]列表是新的。

我的解决办法是写

this.selectedUsers.slice().forEach(function(user) { ... 

从而创造了新的数组,然后这个数组不会改变,因为改变this.users

+0

嗯,在这里,如果一个项目被删除,与删除的项目具有相同索引的项目没有理由似乎被检查。 –

+0

是的,这是真的。因为你没有将所选内容绑定到复选框。 你有或没有自己选中它或进行绑定。 – Alon

+1

哦,谢谢你!如果我使用'this.selectedUsers.slice()'循环并将'iron-list'内的项目更改为'<纸张复选框> [[user.name]]'利用'selected'似乎工作正常。下一步是应用排序和过滤的项目。 –

0

怎么样 -

this.users =这.users.filter(function(u){return(this.selectedUsers.indexOf(u)== -1); });

+0

这将删除选定的项目并刷新列表。问题是,我最终选择了没有理由的项目,现在它们的索引与刚刚删除的索引相同。 –

相关问题