Фильтровать с помощью флажков - логическая проблема

У меня есть grouped Checkbox, а в нем 4 checkboxes.

Когда пользователь устанавливает флажок, мне нужно отфильтровать хранилище данных на основе значения текстового поля. Когда я выбираю 2 текстовых поля, я получаю вывод ["Albert","Francis"], а когда я выбираю только 1-е текстовое поле, я получаю ["Albert"] и так далее.

Теперь мне нужно знать, как фильтровать это?

onCheckBoxGroupChange : function (field,newValue,oldValue,options) {
var chkv=newValue.chb;
console.log (chkv);
var st= Ext.getStore('People'); 
        st.on('load', function() {
           st.filter({
               filterFn: function(rec) {                   
                   return rec.get('name') == chkv; 

Проблема, с которой я сталкиваюсь, заключается в том, что когда я выбираю CheckBoxes, chkv становится ["Albert","Francis"] (как массив), поэтому я не могу вернуть значение, поскольку rec.get('name') == chkv; не ищет массив.

Кто-нибудь может мне помочь?


person Illep    schedule 22.07.2012    source источник


Ответы (1)


что о:

filterFn: function(rec) {
    return Ext.Array.contains(chkv, rec.get('name'));
}

Я хочу убедиться, что вы знаете, что вам не нужно перезагружать магазин, если вы хотите отфильтровать его. Похоже, это то, что вы делаете в приведенном выше фрагменте.

На самом деле есть и другие проблемы, то, что на самом деле будет делать ваш обработчик onCheckBoxGroupChange (если вы оставите его так, как указано выше), будет следующим:

Каждый раз, когда пользователь устанавливает флажок, он сначала перезагружает магазин с сервера, затем добавляет выбранный фильтр к фильтрам магазина, а затем фильтрует магазин по сохраненным фильтрам.

E.g.:

Пользователь устанавливает флажок "Альберт"

Store reloads 
Store adds `["Albert"]` filter function 
Store performs filtering with `["Albert"]` filter function

Пользователь устанавливает флажок "Фрэнсис"

Store reloads
Store adds `["Albert", "Francis"]` filter function
Store performs filtering with `["Albert"]` filter function
Store performs filtering with `["Albert", "Francis"]` filter function

Пользователь снимает флажок "Альберт"

Store reloads
Store adds `["Francis"]` filter function
Store performs filtering with `["Albert"]` filter function
Store performs filtering with `["Albert", "Francis"]` filter function
Store performs filtering with `["Francis"]` filter function

Вы бы просто постепенно получали все больше и больше фильтров. Плюс излишне много раз перезагружать магазин. Я не думаю, что это то, что вы собираетесь.

Вам следует просмотреть документы на фильтрация хранилища данных, чтобы узнать больше о том, как это сделать.

Кроме того, в своем вопросе вы сказали, что у вас возникла эта проблема, когда вы установили два флажка, потому что он возвращал массив. Согласно тексту вашего вопроса, вы также получаете массив, когда устанавливаете один флажок (["Albert"]). В нем есть только один элемент, но это массив.

Вот почему мое решение (которое требует, чтобы ваша переменная chkv была массивом) будет работать.

person egerardus    schedule 23.07.2012