2016-02-14 19 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

這將刪除選定的項目並刷新列表。問題是,我最終選擇了沒有理由的項目,現在它們的索引與剛剛刪除的索引相同。 –

相關問題