【问题标题】:ExtJS 4.2.1 resetting Stores on ViewChangeExtJS 4.2.1 在 ViewChange 上重置商店
【发布时间】:2014-03-09 00:10:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript extjs extjs4 extjs-stores


    【解决方案1】:

    如果它出现在您的 afterrender 事件中,只需清除商店即可。这样一来,您就可以重复使用商店并清除它。

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

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

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

    【讨论】:

    • 我认为它不必对我的事件做任何事情。如果我删除 clearListeners() 事件,一切正常。但是如果我在我的商店中有一些“前加载”事件怎么办?也想清除它们.. 不知道注册了什么事件处理程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 2020-04-14
    • 2012-10-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多