1

カスタム アルゴリズムを使用して Ext ストアをフィルター処理したいと考えています。JSON/AJAX プロキシは 100 を超えるレコードを返します。いくつかの基準に基づいて、その数を上位 5 位まで減らす必要があります。

これにどう対処するか(アルゴリズムではなく、どこでトリガーするか)?

私の現在のアプローチは、そのようなカスタムリーダーを使用することです

Ext.define('MyReader', {
  extend : 'Ext.data.reader.Json',
  alias : 'reader.myReader',

  getResponseData : function(response) {
    var data = this.callParent([response]);
    // algorithm
    return filteredData;
  }
});
Ext.define('SunApp.store.Stations', {
  extend: 'Ext.data.Store',
  requires: ['MyReader'],

  config: {
    model: 'SunApp.model.Station',
    autoLoad: true,
    proxy: {
      type: 'ajax',
      url: 'data.json',
      reader: {
        type: 'myReader'
      }
    }
  }
});

しかし、生の JSON データではなく、ストア モデルに基づいてアルゴリズムを作成したいと考えています。したがって、データがストアにロードされている間/後にフィルタリングしたいと思います。リスト ビューが表示されると、ストアが Ext によって暗黙的に作成されることに注意してください。

Ext.define('SunApp.view.Stations', {
  extend: 'Ext.List',
  xtype: 'stations',

  config: {
    title: 'Stations',
    store: 'Stations',
    ...

したがって、リストに渡される前に手動で呼び出す関数をストアに追加することはできません。

4

1 に答える 1

0

この場合、完全なセットを目的のセットに減らすために、フィルターがストア データ (つまり、レコード) を数回トラバースする必要がある場合があります (はまだ Sencha 新人です...)。

  • オンロード イベント リスナーを作成する
  • 魔法のフィルタリングをする
  • setDataフィルター処理されたデータを渡す store の呼び出し

したがって、リーダーでフィルタリングする代わりに、次のようになります。

Ext.define('SunApp.store.Stations', {
  extend: 'Ext.data.Store',
  config: {
    model: ...,
    sorters: [...],
    listeners: {
      load: function(store, records, success, eOpts) {
        var filteredRecords = filter(records);
        store.setData(filteredRecords);
      }
    },
    proxy: ...
  }
});
于 2013-05-23T20:38:05.987 に答える