Два приложения 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, время: 02:59. |