Просмотр полной версии : Два приложения 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 сразу это не сделали???
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot