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

我所有的页面都扩展了我的基本视图,所以我想我只是做这样的事情:

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

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

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

4

1 回答 1

0

如果它出现在您的 afterrender 事件中,只需清除商店。这样,您将重新使用商店并清除它。

所以在你的 afterrender 中,使用 StoreManager 来查找商店。如果它存在,它是之前创建的,你可以清除它。

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

这将在商店出现时清除商店。

于 2013-11-07T12:50:41.093 回答