Привязать контекст
Здравствуйте, объясните пожалуйста почему так. есть вьюха и есть контроллер. во вьюхе есть кнопка button. В контроллере есть обработчик этой кнопки. во вьюхе я пишу так:
xtype: button,
listeners: {
click: function() {
var me = this;
me.controller.changeFrame().bind(me)
}
}
дебажу этот клик, но this не привязывается и вместо кнопки так и остается контроллером. |
Для начала, bind должен врозвращать результат привязки, он не меняет саму исходную функцию. И потом, может поясните чего вы хотите добиться, какова задача в целом? Может вам и bind не нужен вовсе.
|
я хочу иметь доступ к нажатой кнопке (чтобы посмотреть ее атрибуты) в методе changeFrame, который описан в контроллере. Можно конечно this кнопки как аргумент передать, но почему bind не работает? Исходную функцию я не хочу менять, мне нужно чтобы this был не контроллер а кнопка
|
bind не работает потому, что вы никак не используете его результат. Он порождает новую функцию, а не меняет ту на которой вызван. http://docs.sencha.com/extjs/5.1.1/F...ml#method-bind
Насчет доступа к атрибутам кнопки: она передается в хенлдер как первый аргумент. Берите и читайте что нужно. Вот тут гляньте, например: https://fiddle.sencha.com/#fiddle/1gkc Кнопка Sync имеет хендлер в контроллере, а этот хендлер берет кнопку и читает ее айди. |
Кстати, вы в своем коде делаете байнд не на функцию changeFrame, а на ее результат.
changeFrame.bind |
Спасибо, действительно bind здесь не нужен.
|
Moloch,
У вас слишком сложный код для такой простой задачи. ViewController специально предназначен именно для того, чтобы слушать события своих view, вам не нужно специально вызывать методы контроллера.
Ext.define('MyApp.Panel', {
extend: 'Ext.panel.Panel',
requires: [
'MyApp.PanelController'
],
controller: 'panel',
items: [{
xtype: 'button',
text: 'foo',
listeners: {
click: 'onFooClick'
}
}]
});
Ext.define('MyApp.PanelController', {
extend: 'Ext.app.ViewController',
alias: 'controller.panel',
onFooClick: function(btn) {
// btn === foo button
}
});
|
| Часовой пояс GMT +3, время: 07:59. |