Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.09.2016, 22:40
Аспирант
Отправить личное сообщение для Moloch Посмотреть профиль Найти все сообщения от Moloch
 
Регистрация: 29.10.2013
Сообщений: 94

Привязать контекст
Здравствуйте, объясните пожалуйста почему так. есть вьюха и есть контроллер. во вьюхе есть кнопка button. В контроллере есть обработчик этой кнопки. во вьюхе я пишу так:

xtype: button,
listeners: {
click: function() {
var me = this;
me.controller.changeFrame().bind(me)
}
}


дебажу этот клик, но this не привязывается и вместо кнопки так и остается контроллером.
Ответить с цитированием
  #2 (permalink)  
Старый 13.09.2016, 10:18
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Для начала, bind должен врозвращать результат привязки, он не меняет саму исходную функцию. И потом, может поясните чего вы хотите добиться, какова задача в целом? Может вам и bind не нужен вовсе.
Ответить с цитированием
  #3 (permalink)  
Старый 13.09.2016, 11:36
Аспирант
Отправить личное сообщение для Moloch Посмотреть профиль Найти все сообщения от Moloch
 
Регистрация: 29.10.2013
Сообщений: 94

я хочу иметь доступ к нажатой кнопке (чтобы посмотреть ее атрибуты) в методе changeFrame, который описан в контроллере. Можно конечно this кнопки как аргумент передать, но почему bind не работает? Исходную функцию я не хочу менять, мне нужно чтобы this был не контроллер а кнопка

Последний раз редактировалось Moloch, 13.09.2016 в 11:42.
Ответить с цитированием
  #4 (permalink)  
Старый 13.09.2016, 13:26
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

bind не работает потому, что вы никак не используете его результат. Он порождает новую функцию, а не меняет ту на которой вызван. http://docs.sencha.com/extjs/5.1.1/F...ml#method-bind

Насчет доступа к атрибутам кнопки: она передается в хенлдер как первый аргумент. Берите и читайте что нужно. Вот тут гляньте, например: https://fiddle.sencha.com/#fiddle/1gkc

Кнопка Sync имеет хендлер в контроллере, а этот хендлер берет кнопку и читает ее айди.
Ответить с цитированием
  #5 (permalink)  
Старый 13.09.2016, 13:32
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Кстати, вы в своем коде делаете байнд не на функцию changeFrame, а на ее результат.

changeFrame().bind
changeFrame.bind
Ответить с цитированием
  #6 (permalink)  
Старый 13.09.2016, 14:29
Аспирант
Отправить личное сообщение для Moloch Посмотреть профиль Найти все сообщения от Moloch
 
Регистрация: 29.10.2013
Сообщений: 94

Спасибо, действительно bind здесь не нужен.
Ответить с цитированием
  #7 (permalink)  
Старый 13.09.2016, 21:39
Аватар для nohuhu
Профессор
Отправить личное сообщение для nohuhu Посмотреть профиль Найти все сообщения от nohuhu
 
Регистрация: 21.05.2015
Сообщений: 321

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
    }
});
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контекст функции при вызове по таймеру Bombus Общие вопросы Javascript 15 14.11.2013 08:37
не понимаю как задать правильный контекст loz Dojo toolkit 2 17.02.2011 18:36
[jQuery] [Обработка клика] Как не потерять текущий контекст внутри обработчика? xintrea Events/DOM/Window 1 10.02.2011 16:34
Как привязать к домену и закодировать скрипт? shkur Общие вопросы Javascript 4 10.11.2010 14:27
td.attachEvent('onclick', newrowdelete); Как привязать событие с параметром? serge! Events/DOM/Window 4 23.03.2009 18:38