Вход

Просмотр полной версии : Два приложения Ext.app.Application подряд


khusamov
07.06.2012, 21:15
Почему, когда я создаю два приложения подряд:

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(thi s, 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(thi s, arguments) !== false) {

на эту:

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

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