2013-11-04 89 views
8

我正在使用ExtJS 4.1。我正在使用商店的clearFilter()從商店中刪除過濾器。我通過使用filterBy方法將過濾器應用於商店。我正在過濾名字不是羅納爾多的所有記錄。使用filterBy()應用過濾器時,從ExtJs存儲清除過濾器的最快方法

清除過濾器後,我加載一個包含網格(附加到存儲)的視圖。但是當我加載網格時,我仍然可以看到該濾鏡未被清除。 該商店是本地商店。我沒有在商店中應用任何分組。商店只使用一個模型。

myStore.filterBy(function (record) { 
    if (record.get('Name') != 'Ronaldo') { 
     return true; 
    } 
}); 

雖然這一切工作正常,但是當我用clearFilter()清除過濾器,它需要一些時間。當使用filterBy()應用過濾器時,是否有更快,更好,更正確的方式來清除商店上的過濾器?

+1

當你說「它」是需要一些時間,什麼是「它」?商店?網格/數據視圖?您是遠程過濾還是本地過濾?你有團隊申請?你是否在clearFilter()上抑制事件?你店裏有多少個模型實例?全部或部分或全部這些對您的問題可能很重要,但由於clearFilter()應該是一個非常快速的過程(請查看源代碼:http://docs.sencha。),但不知道更多細節很難提出任何建議。 com/extjs/4.2.1/source/Store.html#Ext-data-Store-method-clearFilter) – existdissolve

回答

11

當您使用clearFilter()時,如果您使用filterBy()filter()或在商店中配置了過濾器,則不會產生影響。

這裏發生了什麼,當你清除過濾器:

  1. 的過濾器在商店將清除此集合
  2. 過濾後的數據被置換成存儲在快照
  3. 原始(未過濾)數據
  4. 的「datachanged」和「刷新」事件在商店發射

請注意,您可以抑制事件通過使用clearFilter(true) WHI被解僱如果您想在清除現有過濾器後再次過濾商店,ch可能會很有用。

如果清除商店的過濾器執行速度很慢則可能與佈局過程中(在網格上或任何你使用的是與實體店),由第3步

另請參閱docs觸發或source code

+0

如果你有'remoteFilter = true',那麼獲取新的(未過濾的)數據也需要一些時間。 –

+0

鏈接不起作用。 – Hari

+0

@Hari我已更正鏈接,感謝提示 – matt

0

只需撥打一個:

myStore.reload(); 

,每當你想刪除使用filterBy篩選器集。

+0

但是,這將重新加載商店,當你只想刪除本地過濾器時,這是非常不必要的。 – MarthyM

3

繼承人我最好的答案,以清除filterBy功能:

myStore.filterBy(function (record) { 
       return true; 
     }); 

我只是做了它,希望它有助於

+0

這可能是最簡單的解決方案。我在組合框中使用了一個遠程過濾存儲,但是我想在用戶在輸入中鍵入內容時在本地過濾它,所以我也使用'store.filterBy()'方法。如果我使用'clearFilter()'方法,我的遠程過濾器將會丟失。 – MarthyM