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 2

1 ответ:

  1. Нет необходимости каждый раз заново создавать регулярное выражение, кэшировать его снаружи.

  2. Вы можете значительно упростить код (см. ниже).

  3. Почему вы звоните 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);
            });
        }
    }]
}