Javascript extjs 5 getStore().filter
我创建了一个简单的函数。如果我向users\u filter(例如:var users\u filter=“abc”)添加值,那么filter检查firstname。但过滤器并没有检查middlename、lastname或电子邮件。为什么?我不使用逻辑或过滤器Javascript extjs 5 getStore().filter,javascript,extjs,filter,logical-operators,Javascript,Extjs,Filter,Logical Operators,我创建了一个简单的函数。如果我向users\u filter(例如:var users\u filter=“abc”)添加值,那么filter检查firstname。但过滤器并没有检查middlename、lastname或电子邮件。为什么?我不使用逻辑或过滤器 click: function(){ Ext.getCmp('users').getStore().filter('firstname' ||'middlename' || 'lastname' || 'email',
click: function(){
Ext.getCmp('users').getStore().filter('firstname' ||'middlename' || 'lastname' || 'email',
Ext.getCmp('users_filter').getValue());
}
您的第一个问题是基本javascript。or运算符最初用于布尔运算。但由于某些值的评估结果为真或假(truthy/falsy),我们可以将其用于我们的优势,例如分配
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');
//...
}