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