2011-08-24 5 views
0

Je rencontre des problèmes dans le filtrage en magasin. Ma fonction de filtre fonctionne bien et renvoie true/false comme prévu .. mais à la fin tous les enregistrements sont filtrés !! Le xstore fait référence à la mémoire de la grille. J'ai aussi utilisé la variable du magasin principal .. mais pas de chance !! Toute aide est appriciée.ExtJs problème dans le magasin de filtrage

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;} 
      } 

     }); 

Merci, Tushar Saxena

Répondre

0

Ext.each est différent d'un JavaScript régulier pour boucle que vous pouvez retourner dans le faux chaque appel à arrêter l'itération. La documentation Ext.each mentionne ceci:

Si la fonction fournie renvoie false, l'itération s'arrête et cette méthode renvoie l'index actuel.

Alors, quand vous retournez à l'intérieur du chaque appel, vous ne retournez pas vrai/faux à la fonction filterBy comme vous attendez, mais à la fonction each.

Essayez de garder une poignée sur isChecked en dehors de la chaque boucle, puis retourne vrai/faux basé sur ce qui a été trouvé à l'intérieur de la chaque fonction:

// 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; 
Questions connexes