过滤商店中的ExtJs问题

时间:2011-08-24 09:10:32

标签: extjs filter store

我在商店过滤方面遇到了麻烦。我的过滤器功能正常工作,并按预期返回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;}
            }

        });

谢谢, Tushar Saxena

1 个答案:

答案 0 :(得分:0)

Ext.each与常规JavaScript for循环不同,因为您可以在每次调用中返回false以停止迭代。 Ext.each文档提到了这一点:

  

如果提供的函数返回false,则迭代停止并且这样   method返回当前索引。

因此,当您从每个调用中返回时,您不会像您期望的那样将{true} / 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;