Лучший способ открыть всплывающее окно браузера, содержащее сетку ExtJS
В нашем приложении ExtJS
у нас есть несколько меню и панель вкладок. При нажатии на menuItem
открывается сетка.
у нас есть требование, когда пользователь может открыть дисплей, содержащий сетку, в любом из двух режимов:
- Inline - Grid откроется как элемент вкладки в
tabpanel
.
- Всплывающее окно - новое окно браузера открывается с помощью
window.open
и целых
Сначала загружается библиотека ExtJS, а затем загружается сетка. Всплывающее окно в качестве окна браузера - это облегчение работы нескольких мониторов.
Итак, проблема в том, что всякий раз, когда мы открываем всплывающее окно, требуется библиотека ExtJS, и она занимает много памяти в IE.
Есть ли другой способ загрузить всплывающее окно браузера с помощью сетки ExtJS без загрузки всей инфраструктуры ExtJS?
Или любая другая идея приветствуется, так как мы действительно сталкиваемся с множеством проблем с памятью в IE, и пользователи не хотят использовать хром.
Спасибо заранее.
Ответы
Ответ 1
Невозможно загрузить сетку в новое окно, не загружая сначала фреймворк Ext (или, по крайней мере, части, необходимые для сетки) в новом окне. Вы не можете получить доступ к копии инфраструктуры ExtJS родительского окна и использовать это, поскольку ExtJS требует, чтобы компоненты работали в одном окне. Это частично связано с безопасностью браузера, которая запрещает копировать или совместно использовать определенные структуры между окнами, а частично - архитектурой ExtJS.
Что касается защиты браузера, это может вызвать проблемы при копировании содержимого сетки. Убедитесь, что вы тестируете все браузеры. Копирование данных между окнами может потребовать сериализации и десериализации для работы во всех браузерах. Например, я не смог скопировать простые даты javascript между окном браузера и iframe в Chrome, они подошли 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
},
Ответ 2
Как насчет выполнения
var popupWin = window.open('...');
popupWin.Ext = window.Ext;
и не загружать ExtJs
в дочернем окне
Ответ 3
Есть инструмент под названием Sencha CMD.
Может потребоваться построить только части Ext js, которые определяются как зависимости (требуется раздел в определениях ваших компонентов). Таким образом, все остальные компоненты, входящие в состав Ext JS, будут игнорироваться.
Вам нужно загрузить источники ext js и выяснить, как использовать этот инструмент
http://docs.sencha.com/cmd/