我创建了一个简单的函数。如果我向users_filter添加值(例如: var users_filter = "abc"),那么筛选检查名。但是filter并不是检查中间名、姓氏或电子邮件。为什么?我不使用逻辑或过滤器?
click: function(){
Ext.getCmp('users').getStore().filter('firstname' ||'middlename' || 'lastname' || 'email',
Ext.getCmp('users_filter').getValue());
}发布于 2015-07-09 13:50:59
您的第一个问题是基本的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‘,则=> 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()。如果你想要重用部分。那就有可能有两个用户-面板.密码被破坏了。也许在这种情况下这听起来很傻,但通常从你点击的按钮向上或向下工作会更好.
click: function(button) {
var usersGrid = button.down('users');
//...
}https://stackoverflow.com/questions/31319221
复制相似问题