Подтвердить что ты не робот

Лучший способ открыть всплывающее окно браузера, содержащее сетку ExtJS

В нашем приложении ExtJS у нас есть несколько меню и панель вкладок. При нажатии на menuItem открывается сетка.

у нас есть требование, когда пользователь может открыть дисплей, содержащий сетку, в любом из двух режимов:

  • Inline - Grid откроется как элемент вкладки в tabpanel.
  • Всплывающее окно - новое окно браузера открывается с помощью window.open и целых Сначала загружается библиотека ExtJS, а затем загружается сетка. Всплывающее окно в качестве окна браузера - это облегчение работы нескольких мониторов.

Итак, проблема в том, что всякий раз, когда мы открываем всплывающее окно, требуется библиотека ExtJS, и она занимает много памяти в IE.

Есть ли другой способ загрузить всплывающее окно браузера с помощью сетки ExtJS без загрузки всей инфраструктуры ExtJS?

Или любая другая идея приветствуется, так как мы действительно сталкиваемся с множеством проблем с памятью в IE, и пользователи не хотят использовать хром.

Спасибо заранее.

4b9b3361

Ответ 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/