ExtJS 4.2.1重置ViewChange上的商店

时间:2013-11-07 10:28:51

标签: javascript extjs extjs4 extjs-stores

在我的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();
},

我的所有页面都扩展了我的基本视图,因此我认为我只是做了类似的事情:

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                                  
            });
        }
    }   
});

当我第一次进入视图时,这将导致网格有时是空的...我不明白为什么...当我进入视图时第二次或有时第三次显示网格与条目..

有没有通用的方法来完成这样的事情?我做错了什么?我不明白为什么会这样。

1 个答案:

答案 0 :(得分:0)

如果商店出现在您的后续活动中,请清除商店。这样,你就可以重新使用商店并清除它。

因此,在您的后续工作中,使用StoreManager查找商店。如果它存在,它是在之前创建的,你可以清除它。

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

只要它存在,这将清除商店。