Показать сообщение отдельно
  #5 (permalink)  
Старый 28.07.2016, 20:46
Аватар для nohuhu
Профессор
Отправить личное сообщение для nohuhu Посмотреть профиль Найти все сообщения от nohuhu
 
Регистрация: 21.05.2015
Сообщений: 321

Сообщение от potkin Посмотреть сообщение
nohuhu,
ЦМД не пользуюсь, но в принципе ясно ...
Зря.

Цитата:
В MVC у View был itemId, по которому в Контроллере задействовались методы. А в MVVM так:
1) Для кнопок нужно объявить toggleHandler: 'onBtnNameClick'
2) Для, например treelist нужен "слушатель" listeners: { itemclick: 'onTreelisttemClick' }
3) И т.д.

Зоопарк одним словом или я что-то не понимаю?
И то, и другое. В старом MVC были только глобальные контроллеры, которые слушали события от *всех* компонентов, и выбирали "свои" события по глобальному селектору. Для того, чтобы не ловить лишние события, селектор нужно было делать максимально избирательным; отсюда рекомендация использовать itemId для идентификации нужных компонентов.

В "новом" MVC есть ViewController, который привязывается к своему view и ловит события только внутри иерархии своего view. Для реакции на события используются методы ViewController, и в конфигурации view вы задаёте названия этих методов.

Что касается toggleHandler и itemclick, то это очень разные вещи. Во-первых, toggleHandler применим только к кнопкам-переключателям; во-вторых, он срабатывает при смене состояния, а не при клике. Вам никто не мешает слушать событие click на кнопках, но обычно для переключателей интересен именно момент смены состояния.

Исторически в Ext для активных компонентов предлагалось два варианта информирования о событиях: собственно событие, на которое можно подписаться (в данном случае toggle), или функция callback, которую можно было указать в конфигурации компонента (toggleHandler). В современном Ext для callback вместо функции можно указать имя метода в ViewController.

Оба варианта функционально идентичны:

Код:
{
    xtype: 'button',
    text: 'foo',
    enableToggle: true,
    toggleHandler: 'onFooToggle'
}, {
    xtype: 'button',
    text: 'bar',
    enableToggle: true,
    listeners: {
        toggle: 'onBarToggle'
    }
}
В TreeList смены состояния нет, поэтому слушайте событие itemclick.
Ответить с цитированием