События контроллера приложения
Могу ли я подписаться как-то на события контроллера приложения Ext.app.Controller из какого-либо вида?
У меня есть контроллер, который обрабатывает ввод из сканера штрих-кодов. Он сам что-то делает и когда вводится код, то генерирует событие barcode. Я хотел бы, чтобы некоторые виды его отображали. Но как из вида подписаться на событие контроллера (не путать с контроллером вида) приложения не ясно. |
Пока сделал так. Правильно ли это я сделал?
Ext.define("Element.view.cuttingList.CuttingListController", { extend: "Ext.app.ViewController", alias: "controller.cutting-list", init: function() { var app = Element.getApplication(); app.getController("Barcode").on("barcode", "onBarcode", this); }, |
Используйте домены событий, я их именно для таких целей и добавлял: http://stackoverflow.com/questions/1...55497#19255497
А вот ещё кусок примера в документации, о которой я уже успел забыть. :) http://docs.sencha.com/extjs/6.0/6.0...-method-listen |
Правильно?
init: function() { this.listen({ controller: { "*": { barcode: "onBarcode", scope: this } } }); }, или "#barcode": { barcode: "onBarcode", scope: this } или "barcode": { barcode: "onBarcode", scope: this } Правда последнее похоже будет конфликтовать с алиасами контролеров видов... Поэтому наверное лучше так: "app.barcode": { barcode: "onBarcode", scope: this } |
Да, так должно работать. Две небольшие поправки: во-первых, scope: this избыточно, т.к. это и есть контекст вызова по умолчанию для методов. Во-вторых, в Ext 5+ можно вместо вызова this.listen() просто задать конфигурацию listen:
Ext.define('My.app.Controller', { extend: 'Ext.app.Controller', listen: { controller: { '#barcode': { 'barcodeInput': 'onBarCodeInput' } } }, onBarCodeInput: function() { ... } }); Старайтесь писать декларативный код везде, где возможно; это вам пригодится многократно. |
Часовой пояс GMT +3, время: 23:03. |