Javascript 如何销毁ExtJS网格而不影响其存储?
我有这样一个ExtJS商店:Javascript 如何销毁ExtJS网格而不影响其存储?,javascript,extjs,Javascript,Extjs,我有这样一个ExtJS商店: var dataStore = new Ext.data.JsonStore({...}); 我将它与工厂一起使用,以获得GridPanel: function CreateGrid(config) { return new Ext.grid.GridPanel({ store: dataStore, ... }) }; 现在,当我运行此代码时: new Ext.Window({ closable: tru
var dataStore = new Ext.data.JsonStore({...});
我将它与工厂一起使用,以获得GridPanel:
function CreateGrid(config) {
return new Ext.grid.GridPanel({
store: dataStore,
...
})
};
现在,当我运行此代码时:
new Ext.Window({
closable: true,
items: CreateGrid(),
}).show();
我第一次运行它时,网格工作正常。但是,如果我关闭窗口并重新打开另一个窗口,我将无法再对列进行排序,也无法刷新存储
我已经将问题精确定位到了商店,以及当网格被破坏时发生的任何事情。如果我将CreateGrid()
函数改为此:
function CreateGrid(config) {
return new Ext.grid.GridPanel({
store: new Ext.data.JsonStore({...}),
...
}
};
它工作得非常好,除了我每次都要开一家新的商店,而不是重复使用旧的
如何解决此问题,以便在不破坏商店的情况下销毁网格?这背后的想法是,我想保留存储以保留列排序和筛选,但销毁网格以节省内存。您没有指定如何关闭窗口(通过调用close方法或从UI关闭窗口),但也许您应该隐藏它?引用ExtJS文档: 默认情况下,“关闭页眉”工具 破坏窗口,导致 销毁任何子组件。 这将创建窗口对象,以及所有 它的后代无法使用。使能 重新使用窗口时,请使用closeAction: “隐藏” 特别是关于closeAction配置选项: 此设置不影响关闭 方法,它将始终破坏 窗户。以编程方式隐藏 窗口,调用隐藏
在商店中,设置
autoDestroy:false
这背后的想法是,我希望保留存储以保留列排序和筛选,但为了节省内存而破坏网格
列排序和筛选是在GridPanel
对象内部保存,还是在存储
对象内部保存?如果不深入研究src代码,我不确定。这可能是你的问题。也许您可以在cookie中实现“记住”排序/筛选(请参见Ext.state.Manager
)
您也可以尝试隐藏网格,而不是像Tommi建议的那样删除它。如果您只有一个网格,内存使用应该不会太差
最后一件要尝试的事情:在工厂fn中,创建网格,然后使用
grid.store=dataStore将存储附加到它代码>我发现了问题所在。Livegrid扩展有一个bug,当网格关闭时,它会弄乱底层Livegrid特定的存储。我知道这已经太晚了,但我一直在ExtJS 4(3)中破坏网格,存储被保留下来
我发现,如果你给一个存储一个storeId值,它就会被保留(在ExtJS3中,它会一直持续到DOM被清除或Ext.StoreMgr.lookup(storeId).destory()被调用为止)。默认情况下它是false,我没有将它设置为true。哎呀,我使用Window
只是作为一种简单的方法来测试这个问题。GridPanel
实际上位于另一个面板中,我正在使用Panel.remove()
删除网格。