Sencha touch 2 filterby () не обновляет записи
У меня есть вложенный список на одной из страниц приложения с вкладками, которое извлекает данные из "офисов.json "
Я хотел бы иметь возможность фильтровать этот список, когда пользователь нажимает на кнопку панели инструментов. Однако моя функция filterBy () не обновляет магазин и список офисов, которые я вижу, хотя я вижу в консоли, что она повторяет записи и находит совпадение. Что я делаю не так? (И да, я пробовал делать s. load() как до, так и после filterBy, чтобы нет безуспешно!)
toolbar:{
items:[{
text: 'Near you',
id: 'btnNearYou',
xtype: 'button',
handler: function() {
s = Ext.StoreMgr.get('offices');
s._proxy._url = 'officesFLAT.json';
console.log("trying to filter");
s.filterBy(function(record) {
var search = new RegExp("Altrincham", 'i');
if(record.get('text').match(search)){
console.log("did Match");
return true;
}else {
console.log("didnt Match");
return false;
}
});
s.load();
}
}]
Для записи я определяю свой магазин следующим образом:
store: {
type: 'tree',
model: 'ListItem',
id: 'offices',
defaultRootProperty: 'items',
proxy: {
type: 'ajax',
root: {},
url: 'offices.json',
reader: {
type: 'json',
rootProperty: 'items'
}
}
}
1 ответ:
Нет необходимости каждый раз заново создавать регулярное выражение, кэшировать его снаружи.
Вы можете значительно упростить код (см. ниже).
Почему вы звоните load сразу после этого? Это отправит его на сервер, и он просто получит тот же набор данных.
toolbar: { items: [{ text: 'Near you', id: 'btnNearYou', xtype: 'button', handler: function() { s = Ext.StoreMgr.get('offices'); s._proxy._url = 'officesFLAT.json'; var search = /Altrincham/i; s.filterBy(function(record) { return !!record.get('text').match(search); }); } }] }