我一直在將過濾器應用於商店。過濾器和過濾器
直到最近,我一直在使用'過濾器'方法將多個過濾器添加到商店。我喜歡這種方法,因爲我可以使用過濾器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在一起清晰的文檔,我提出以下問題:
- 是我以前的看法是否準確?
- 如果是這樣,那麼我是否應該避免在同一商店中使用過濾器和過濾器,因爲它們看起來並不是一起工作的?
- 另一方面,如果過濾器和filterBy旨在一起使用,是他們的一些最佳實踐規則?也許一種方法來給過濾器一個ID?
預先感謝所有的反饋,
親切的問候, Chopo
詩篇。我目前正在使用ExtJs V4.2