Вот другой подход:
Это позволяет избежать getCmp
вызова и не использует жестко закодированные идентификаторы, какие пары вашу логику для конкретных идентификаторов, которые могут быть подвержены ошибкам, если вы расширяете ваше приложение. Используя жестко закодированные идентификаторы, вы можете столкнуться с конфликтами с другими частями вашего приложения, если дважды назначить один и тот же идентификатор.
Дополнительный подход использует концепцию ViewControllers
и references
, которая является предлагаемым способом Sencha в настоящее время для настройки вашей логики просмотра, особенно для крупных приложений (см. ViewControllers).
Ext.define('MyApp.view.foo.FilterController', {
extend: 'Ext.app.ViewController',
alias: 'controller.FilterController',
bt1Event: function() {
alert('bt1 clicked');
},
bt2Event: function() {
alert('bt2 clicked');
// get a reference to the first button
var bt1 = this.lookupReference('bt1');
bt1.fireEvent('click', bt1);
}
});
Ext.define('MyApp.view.foo.Foo', {
extend: 'Ext.panel.Panel',
bodyPadding: 5, // Don't want content to crunch against the borders
width: 300,
title: 'Filters',
controller : 'FilterController',
defaults : {
xtype : 'button'
},
items: [{
text: 'Button 1',
reference: 'bt1',
listeners : {
click: 'bt1Event' // handled by view controller
}
}, {
text: 'Button 2',
reference: 'bt2',
listeners : {
click: 'bt2Event' // handled by view controller
}
}]
});
Ext.create('MyApp.view.foo.Foo', {
renderTo: Ext.getBody()
});
Я создал скрипку, чтобы продемонстрировать этот подход Sencha Fiddle
'Ext.getCmp' будет гораздо более эффективным, чем цикл CQ. –
@EvanTrimboli Ya правильный. Я обновил свое решение. Спасибо за предложение. – UDID
Спасибо, я использую обработчик с getCmp и работаю как шарм – darkcosplay