2015-07-09 3 views
1

Я создал простую функцию. Если я добавлю значение users_filter (пример: var users_filter = "abc"), тогда проверьте имя фильтра firstname. Но фильтр не проверяет имя или фамилию или адрес электронной почты. Зачем? Я не использую логический ИЛИ на фильтре?extjs 5 getStore(). Filter

click: function(){ 
     Ext.getCmp('users').getStore().filter('firstname' ||'middlename' || 'lastname' || 'email', 
     Ext.getCmp('users_filter').getValue()); 
} 

ответ

1

Ваша первая проблема - это простой javascript. Оператор или изначально предназначен для булевых операций. Но поскольку некоторые значения оцениваются как истинные или ложные (правдивые/ложные), мы можем использовать их в наших интересах, например. назначение.

var filterVariable = 'firstname' ||'middlename' || 'lastname' || 'email'; 
    console.log(filterVariable); //returns 'firstname' 

рассмотреть этот фрагмент:

var someFilter, 
    defaultFilter = 'lastname'; 

if(condition) { 
    someFilter = 'firstname'; 
} 

var filterVariable = someFilter || defaultFilter; 

теперь, если условие === истина => filterVariable оценивает как 'FirstName' еще => filterVariable оценивает как 'фамилия'

Но будьте осторожны если значение параметра SomeFilter равно "", 0, [], null, ..., оно будет оцениваться как ложное и принять значение по умолчанию.

Так что вы написали никогда не сможете к!

Это в стороне .. это будет работать:

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'); 
    //... 
} 
Смежные вопросы