2

「offices.json」からデータを取得しているタブ付きパネルアプリのページの1つにネストされたリストがあります

ユーザーがツールバーボタンをクリックしたときに、このリストをフィルタリングできるようにしたいと思います。ただし、filterBy()関数は、コンソールに表示されていても、レコードを繰り返して一致するものを見つけているにもかかわらず、表示されているストアとオフィスのリストを更新しません。私は何が間違っているのですか?(はい、filterByの前後の両方でs.load()を実行しようとしましたが、役に立ちませんでした!)

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'
        }
    }
}
4

1 に答える 1

2
  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);
            });
        }
    }]
}
于 2012-11-19T23:43:53.353 に答える