【问题标题】:extjs 5 getStore().filterextjs 5 getStore().filter
【发布时间】:2015-07-09 13:38:19
【问题描述】:

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

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

【问题讨论】:

    标签: javascript extjs filter logical-operators


    【解决方案1】:

    您的第一个问题是基本的 javascript。 or 运算符最初用于布尔运算。但是因为某些值评估为真或假(真/假),我们可以利用它来发挥我们的优势,例如任务。

    var filterVariable = 'firstname' ||'middlename' || 'lastname' || 'email';
        console.log(filterVariable); //returns 'firstname'
    

    考虑一下这个sn-p:

    var someFilter,
        defaultFilter = 'lastname';
    
    if(condition) { 
        someFilter = 'firstname';
    }
    
    var filterVariable = someFilter || defaultFilter;
    

    现在如果条件 === true => filterVariable 评估为 'firstname' else => filterVariable 计算为“姓氏”

    但要小心,如果 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'); 
        //...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 2017-06-05
      • 1970-01-01
      相关资源
      最近更新 更多