Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Два приложения Ext.app.Application подряд (https://javascript.ru/forum/extjs/28943-dva-prilozheniya-ext-app-application-podryad.html)

khusamov 07.06.2012 21:15

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

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


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

А во втором все работает.

khusamov 07.06.2012 22:13

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

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 задумано как синглтон.

khusamov 07.06.2012 23:43

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

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 сразу это не сделали???


Часовой пояс GMT +3, время: 03:10.