Проблема ExtJs в магазине фильтрации - PullRequest
0 голосов
/ 24 августа 2011

У меня проблемы с фильтрацией в магазине. Моя функция фильтра работает нормально и возвращает true / false, как и ожидалось ... но в итоге все записи отфильтрованы !! Xstore является ссылкой на магазин Grid. Я также использовал переменную основного хранилища .. но не повезло !! Любая помощь ценится.

xstore.filterBy(function(rec){

        app_rec = rec.get('APPNAME').toUpperCase(); //Record's value that needs to be checked'

        Ext.each(elems,function(el){ //For each record, it checks 7 (dynamic) elements 
            //var ischecked = Ext.get(Ext.getCmp(el.id).teamName+'cb').dom.checked;

            if(Ext.getCmp(el.id).teamName.toUpperCase() == app_rec)
            {// If Element's attribute 'teamname' is matched then check if element's chkbox is chked/unched' 
                var ischecked = Ext.get(Ext.getCmp(el.id).teamName+'cb').dom.checked; //get the checkbox
                //alert("app_rec: "+app_rec+"panelTeam: " + Ext.getCmp(el.id).teamName.toUpperCase()+"isChecked: "+ischecked );
                if(ischecked) //if isChecked... keep record.. below alert if working as expected
                { alert("return true"+"app_rec: "+app_rec+"panelTeam: " + Ext.getCmp(el.id).teamName.toUpperCase()+"isChecked: "+ischecked); 
                    return true;} 
                else //Else avoid record
                { //alert("return false"); 
                    return false;}
            }

        });

Спасибо, Тушар Саксена

1 Ответ

0 голосов
/ 24 августа 2011

Ext.each отличается от обычного цикла JavaScript for тем, что вы можете возвращать false в каждом вызове, чтобы остановить итерацию.Документация Ext.each упоминает это:

Если предоставленная функция возвращает false, итерация останавливается, и этот метод возвращает текущий индекс.

Поэтому, когда вы возвращаетесь изв каждом вызове вы не возвращаете истину / ложь функции filterBy, как вы ожидаете, а функции each.

Старайтесь держать ручку на isChecked вне каждого циклаи затем верните true / false, основываясь на том, что было найдено внутри каждой функции:

// excluded your other code to highlight area around Ext.each call

var isChecked = false;

Ext.each(elems, function(el){ 
    if(Ext.getCmp(el.id).teamName.toUpperCase() == app_rec) {
        ischecked = Ext.get(Ext.getCmp(el.id).teamName+'cb').dom.checked;

        // can exit early if isChecked is true
        if(isChecked){
            return false; // this will exit the Ext.each method
        }
    }
});

// if this is true, filterBy will include the record
return isChecked;
...