您的第一个问题是基本的 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');
//...
}