extjs 5 getStore()。filter

时间:2015-07-09 13:38:20

标签: javascript extjs filter logical-operators

我创建了一个简单的函数。如果我向users_filter添加值(例如:var users_filter =" abc"),则过滤检查firstname。但过滤器不检查中间名或姓氏或电子邮件。为什么?我不在过滤器上使用逻辑OR吗?

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

1 个答案:

答案 0 :(得分:1)

你的第一个问题是基本的javascript。 or运算符最初用于布尔运算。但是因为某些值被评估为真或假(真或假),我们可以将它用于我们的优势,例如:分配

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'); 
    //...
}