我创建了一个简单的函数。如果我向users_filter添加值(例如:var users_filter =" abc"),则过滤检查firstname。但过滤器不检查中间名或姓氏或电子邮件。为什么?我不在过滤器上使用逻辑OR吗?
click: function(){
Ext.getCmp('users').getStore().filter('firstname' ||'middlename' || 'lastname' || 'email',
Ext.getCmp('users_filter').getValue());
}
答案 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');
//...
}