Javascript extjs 5 getStore().filter

Javascript extjs 5 getStore().filter,javascript,extjs,filter,logical-operators,Javascript,Extjs,Filter,Logical Operators,我创建了一个简单的函数。如果我向users\u filter(例如:var users\u filter=“abc”)添加值,那么filter检查firstname。但过滤器并没有检查middlename、lastname或电子邮件。为什么?我不使用逻辑或过滤器 click: function(){ Ext.getCmp('users').getStore().filter('firstname' ||'middlename' || 'lastname' || 'email',

我创建了一个简单的函数。如果我向users\u filter(例如:var users\u filter=“abc”)添加值,那么filter检查firstname。但过滤器并没有检查middlename、lastname或电子邮件。为什么?我不使用逻辑或过滤器

click: function(){
      Ext.getCmp('users').getStore().filter('firstname' ||'middlename' || 'lastname' || 'email',
      Ext.getCmp('users_filter').getValue());
}

您的第一个问题是基本javascript。or运算符最初用于布尔运算。但由于某些值的评估结果为真或假(truthy/falsy),我们可以将其用于我们的优势,例如分配

var filterVariable = 'firstname' ||'middlename' || 'lastname' || 'email';
    console.log(filterVariable); //returns 'firstname'
考虑一下这个片段:

var someFilter,
    defaultFilter = 'lastname';

if(condition) { 
    someFilter = 'firstname';
}

var filterVariable = someFilter || defaultFilter;
现在,如果条件===true=>filterVariable的计算结果为“firstname” else=>filterVariable的计算结果为“lastname”

但是,如果someFilter设置为
”、0、[]、null、
,请小心,它将计算为false并使用defaultFilter

所以你写的东西永远不会有用

除此之外。。这将有助于:

click: function(){
    var store = Ext.getCmp('users').getStore(),
        val = Ext.getCmp('users_filter').getValue();

    store.filterBy(function(rec){
        return rec.get('firstname') === val ||
               rec.get('middlename') === val || 
               rec.get('lastname') === val ||
               rec.get('email') === val; 
    });
}
fwi:我尽量避免使用Ext.getCmp()。如果您想要重用零件,会发生什么。那么您可能有2个用户面板。。。密码被破解了。也许在这种情况下,这听起来很傻,但通常从你点击的按钮向上或向下操作会更好

click: function(button) { 
    var usersGrid = button.down('users'); 
    //...
}