Два приложения Ext.app.Application подряд 
		
		
		
		Почему, когда я создаю два приложения подряд: 
	
var app1 = Ext.create("Ext.app.Application", {
	name: "App1",
	...
});
    
var app2 = Ext.create("Ext.app.Application", {
	name: "App1",
	...
});
то в первом приложении перестают работать обработчики, определенные в методе this.control({...})? А во втором все работает.  | 
	
		
 Порылся в исходниках. Похоже вот эту инструкцию: 
	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 задумано как синглтон.  | 
	
		
 Вот решение этой проблемы: 
	
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, время: 14:49. |