События запуска во всплывающем окне (ExtJS) - PullRequest
0 голосов
/ 20 августа 2010

В настоящее время мы разрабатываем приложение, которое широко использует всплывающие окна (*) и столкнулось с проблемой IE (об этом сообщалось до , но я не смог найти никакого решения).

Проблема в следующем: наше главное окно M открывает всплывающее окно P и сохраняет ссылку на него. P затем регистрирует обработчик событий для объекта в M . Когда событие запускается, IE8 взрывается со следующим сообщением об ошибке:

JScript object expected
ext-all-debug.js (Line 1735, Char 17)
Code: 0

которая является функцией огня в EXTUTIL.Event.prototype. Код отлично работает в Firefox, Opera и Chrome.

Я предоставил минимальный пример , который вызывает такое поведение.

Любая помощь приветствуется.

(*) Да, для этого есть веская причина. И нет, Ext.Window не вариант.

1 Ответ

2 голосов
/ 27 августа 2010

Ну, по крайней мере, у меня есть значок с камышами.: -)

Оказывается, вы не можете использовать ExtJS для запуска событий через окна браузера в IE.Кондор из группы поддержки сообщества ExtJS сказал:

Ext не безопасен для использования в Windows.Каждое окно должно иметь свой собственный экземпляр Ext, и связь между двумя окнами должна осуществляться только с использованием примитивных типов данных (String, Number, Boolean, Date).

Это означает, что вы не можете зарегистрировать обработчик события вдругое окно, потому что это будет означать передачу объектов в другое окно.

Как оказалось, это не совсем точно (по крайней мере, в IE7 и выше).Вы можете ссылаться на объекты через окна браузера.То, что вы не можете сделать, это использовать систему событий Ext.

Обходной путь, который я использовал, вместо регистрации обработчиков событий в P , позволяет M вызывать методы в P , которые затем запускают события«локально».Это, конечно, не совсем элегантно или гибко, но работает хорошо во всех браузерах.Кроме того, я думаю, что хорошей практикой является поддерживать связь между окнами простой и четкой.Если вы используете обработчики событий, вы должны внимательно следить за тем, что происходит, например, вам необходимо убедиться, что вы отменили регистрацию всех обработчиков событий до закрытия окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...