在我们的 ExtJS
应用程序中,我们有一些菜单和一个选项卡面板。单击 menuItem
打开一个网格。
我们有一个要求,用户可以在两种模式中的任何一种模式下打开包含网格的显示:
- 内联 - 网格将作为
tabpanel
中的选项卡项打开。 - 弹出 - 使用
window.open
打开一个新的浏览器窗口 首先加载 ExtJS 库,然后加载网格。 弹出浏览器窗口是为了方便多显示器。
所以这里的问题是,每当我们打开弹出窗口时,都需要 ExtJS 库,并且它在 IE 中占用大量内存。
有没有其他方法可以使用 ExtJS 网格加载浏览器弹出窗口,而无需加载整个 ExtJS 框架?
或者任何其他想法都是最受欢迎的,因为我们确实在 IE 中面临很多内存问题,而且用户不愿意使用 chrome。
提前致谢。
最佳答案
如果不先在新窗口中加载 Ext 框架(或至少是网格所需的部分),就不可能将网格加载到新窗口中。您无法访问并使用父窗口的 ExtJS 框架的副本,因为 ExtJS 要求组件位于同一窗口中才能正常工作。这部分是由浏览器安全性造成的,浏览器安全性禁止在窗口之间复制或共享某些结构,部分是由 ExtJS 架构造成的。
关于浏览器安全性,当您仅复制网格内容时甚至可能会导致问题。确保测试所有不同的浏览器。在窗口之间复制数据可能需要序列化和反序列化才能在所有浏览器中工作。例如,我无法在 Chrome 中的浏览器窗口和 iframe 之间复制简单的 JavaScript 日期,它们出现了 null
。我必须序列化记录,传输它们,然后再次反序列化它们:
var serializedRecords = dataStore.getRange().map(function(record) {
return record.getData({serialize:true, persist:true}); // <- serialization required
});
iframe.contentWindow.Ext.getStore("DataStore").
loadRawData(serializedRecords); // <- loadRawData deserializes records
},
关于javascript - 打开包含 ExtJS 网格的浏览器弹出窗口的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44920628/