События контроллера приложения
Могу ли я подписаться как-то на события контроллера приложения 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, время: 13:48. |