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