2

私の ExtJS アプリケーションでは、ページを変更したときにストアをリセットしたいと考えています。つまり、古いビュー/ページからのフィルター、グループ化、またはリスナーは必要ありません。

Currentyl ビューのストアを次のように設定しています。

{
   xtype: 'admingrid',
   ...
   columns: [
      ...
   ],
   store: 'appname.store.administration.User'
}

私はそのように店をロードしています:

onAfterRender: function() {
    //load all users
    this.setUserStore(this.getUserGrid().getStore());
    this.getUserStore().load();
},

場合によっては、次のようになります。

onAfterRender: function() {
    //load all users
    this.setUserStore(Ext.StoreManager.lookup('appname.store.administration.User'));
    this.getUserStore().load();
},

私のページはすべて Base ビューを拡張するので、次のようなことをするだけだと思いました:

Ext.define("appname.view.Base", {
    extend: 'Ext.panel.Panel',
    ui: 'basepanel',

    padding: 15,
    contentPaddingProperty: 'padding',

    listeners: {
        beforedestroy: function() {
            Ext.StoreManager.each(function (item, index, len) {
                 item.clearFilter(true); // param: suppressEvent
                 item.clearGrouping();
                 item.clearListeners(); // this will also remove managed listeners                                  
            });
        }
    }   
});

これにより、最初にビューに入るときにグリッドが空になることがあります...理由がわかりません..ビューに2回目または3回目に入ると、エントリを含むグリッドが表示されます..

そのようなことを達成するための一般的な方法はありますか? 私が間違っていることは何ですか?なぜこれが起こっているのかわかりません。

4

1 に答える 1

0

Afterrender イベントに存在する場合は、ストアをクリアするだけです。そうすれば、ストアを再利用してクリアするだけです。

したがって、アフターレンダーでは、StoreManager を使用してストアを検索します。存在する場合は、以前に作成されており、クリアできます。

var store = Ext.StoreManager.lookup('storeid');
if(store) {
  store.clearFilter(true); 
  store.clearGrouping();
}

これにより、ストアが存在するときはいつでもストアがクリアされます。

于 2013-11-07T12:50:41.093 に答える