Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.06.2012, 21:15
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Два приложения Ext.app.Application подряд
Почему, когда я создаю два приложения подряд:

var app1 = Ext.create("Ext.app.Application", {
	name: "App1",
	...
});
    
var app2 = Ext.create("Ext.app.Application", {
	name: "App1",
	...
});


то в первом приложении перестают работать обработчики, определенные в методе this.control({...})?

А во втором все работает.
Ответить с цитированием
  #2 (permalink)  
Старый 07.06.2012, 22:13
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Порылся в исходниках. Похоже вот эту инструкцию:

this.eventbus = new Ext.app.EventBus;


дважды исполнять нельзя.

Так как в конструкторе Ext.app.EventBus есть код:

Ext.override(Ext.Component, {
            fireEvent: function(ev) {
                if (Ext.util.Observable.prototype.fireEvent.apply(this, arguments) !== false) {
                    return me.dispatch.call(me, ev, this, arguments);
                }
                return false;
            }
});


И получается, что каждое последующее приложение Ext.create("Ext.app.Application") перезаписывает fireEvent и предыдущие конечно же не срабатывают.

Эх, получается приложение Ext.app.Application задумано как синглтон.
Ответить с цитированием
  #3 (permalink)  
Старый 07.06.2012, 23:43
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Вот решение этой проблемы:

Ext.require("Ext.app.EventBus");
Ext.override(Ext.app.EventBus, {
		constructor: function() {
			this.mixins.observable.constructor.call(this);
			this.bus = {};
			var me = this;
			Ext.override(Ext.Component, {
				fireEvent: function(ev) {
					if (this.callParent(arguments) !== false) {
						return me.dispatch.call(me, ev, this, arguments);
					}
					return false;
				}
			});
		}
});


Просто заменил эту строку:

if (Ext.util.Observable.prototype.fireEvent.apply(this, arguments) !== false) {


на эту:

if (this.callParent(arguments) !== false) {


И почему в sencha сразу это не сделали???
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Продажа одобренного игрового приложения в 4 соц с доходом monstrons Flash 4 05.02.2013 20:16
Помогите с архитектурой приложения epson Общие вопросы Javascript 6 09.02.2012 16:32
Два блока div разъезжаются при скроллинге окна браузера. call007 jQuery 0 03.04.2011 16:21
Конфликтуют два скрипта Aydar_nv Работа 2 27.01.2011 11:13
Блок переключения меню на JS, два скрипта в одном файле Dizeloid Элементы интерфейса 0 30.07.2009 12:03