Привязать контекст
Здравствуйте, объясните пожалуйста почему так. есть вьюха и есть контроллер. во вьюхе есть кнопка 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, время: 13:57. |