extjs 5 getStore().过滤器
extjs 5 getStore().filter
我创建了一个简单的函数。如果我将值添加到 users_filter(例如:var users_filter = "abc"),然后过滤检查名字。但是过滤器不检查中间名或姓氏或电子邮件。为什么?我不会在过滤器上使用逻辑或?
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;
现在 if condition === 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');
//...
}
我创建了一个简单的函数。如果我将值添加到 users_filter(例如:var users_filter = "abc"),然后过滤检查名字。但是过滤器不检查中间名或姓氏或电子邮件。为什么?我不会在过滤器上使用逻辑或?
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;
现在 if condition === 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');
//...
}