2015-10-05 211 views
3

我一直在將過濾器應用於商店。過濾器和過濾器

直到最近,我一直在使用'過濾器'方法將多個過濾器添加到商店。我喜歡這種方法,因爲我可以使用過濾器ID應用多個過濾器來存儲和跟蹤/刪除過濾器:

如:

舉例店:

storeId: 'members', 
    fields: [ 
    { name: 'M_NAME' }, 
    { name: 'COUNTRY' }, 
    { name: 'GROUP' } 
    ] 

我可以SRING一對夫婦根據國家和組別篩選:

stores.members.addFilter({ 
    id: 'F_COUNTRY', 
    property: 'COUNTRY', 
    exactMatch: true, 
    value: 'UK' 
}); 

stores.members.addFilter({ 
    id: 'F_GROUP', 
    property: 'GROUP', 
    exactMatch: true, 
    value: 'Developer' 
}); 

到目前爲止狀況良好。我可以看到我有使用兩個過濾器:

stores.members.filters.length

使用刪除單個過濾器:

stores.members.removeFilter( 'FILTER_NAME')

或超負荷過濾器:

stores.members.addFilter({ 
    id: 'F_COUNTRY', 
    property: 'COUNTRY', 
    exactMatch: true, 
    value: 'France' 
}); 

我可以看到過濾器已被重載,因爲stores.members.filters.length仍然會返回相同數量的過濾器,而stores.members.filters.getAt(filter_number).id仍會在成員時返回'F_COUNTRY'。 filters.getAt(filter_number).value已從「UK」更改爲「France」。

最近,我發現需要添加更多使用filterBy方法最好實現的複雜過濾器。 E.g:

stores. members.filterBy(function(record){ 
    return (record.get('GROUP'=='Developer') || record.get('GROUP'=='Manager')); 
}); 

現在,我似乎發現的是,當我將此過濾器,是以往所有過濾器使用「過濾器」的方法設置將被忽略。它們仍可通過stores.members.filters.getAt(filter_number).id/value和stores.members.filters.length顯示,但未使用。

只要我使用'filter'和'removeFilter'方法添加,刪除或重載一個過濾器,使用'filter'方法創建的過濾器就會再次激活,並且使用'filterBy'方法創建的過濾器變爲非活動狀態。另外,如果我使用'filterBy'方法添加一個新的過濾器,這似乎覆蓋了前面的過濾器。

既然我無法找到使用過濾器和filterBy在一起清晰的文檔,我提出以下問題:

  1. 是我以前的看法是否準確?
  2. 如果是這樣,那麼我是否應該避免在同一商店中使用過濾器和過濾器,因爲它們看起來並不是一起工作的?
  3. 另一方面,如果過濾器和filterBy旨在一起使用,是他們的一些最佳實踐規則?也許一種方法來給過濾器一個ID?

預先感謝所有的反饋,

親切的問候, Chopo

詩篇。我目前正在使用ExtJs V4.2

回答

1

filter方法的文檔說:「默認情況下,傳遞的過濾器被添加到用於過濾該Store的過濾器集合中。」 (http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.data.Store-method-filter

filterBy方法的文檔沒有提到過濾器被添加到當前過濾器集合中,所以我想你的觀察結果是準確的。

您可以使用Filter類(http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.util.Filter)來顯式創建過濾器。然後,您可以使用addFilter(...)removeFilter(...)從商店中添加或刪除它們。