Backbone.js — использование триггера для запуска события и передачи данных

Я пишу компонент меню вкладок, используя backbone.js в качестве основы MVC. Когда пользователь нажимает на вкладку, компонент переключает вкладки (внутренняя операция), но тогда я хотел бы, чтобы слушатели компонента реагировали на действие, связанное с событием. Идея заключается в том, что я абстрагирую различные клики в конкретные действия. Например, модель для каждой вкладки представляет собой хэш со следующей структурой:

{
    label : <string>,
    actionCommand : "save",
    tabClass : <string>
}

Событие, которое будет инициировано, будет называться «действие», поэтому слушатели будут реагировать на «действие», но затем будут пересылать конкретную команду. Например:

this.trigger("action", {actionCommand: "save"});

Слушатель, в свою очередь, будет обрабатывать событие аналогично следующему:

handleAction : function(event) {
  if (event.actionCommand == "save") {
    ...do something...
  }

}

Это возможно? Я не мог подобрать это из документации. Заранее спасибо за любую информацию, которую вы можете предложить.


person Brendan Delumpa    schedule 23.12.2011    source источник


Ответы (1)


Да, это возможно с Backbone.

Вы можете использовать модуль Events, чтобы дать объекту возможность связывать и запускать настраиваемые именованные события.

В вашем случае вы хотели бы добавить модуль Events к объекту компонента меню. Если этот объект является магистральной моделью, то он уже имеет модуль событий. Если нет, то вы можете добавить его с помощью следующего кода

_.extend(MenuComponent, Backbone.Events);

Тогда ваши слушатели могут подписаться вот так

MenuComponent.bind("action", this.handleAction, this);

И вы можете вызвать событие, как вы уже упоминали

this.trigger("action", {actionCommand: "save"});
person Paul    schedule 23.12.2011
comment
Красивый! Хэш копируется в объект события? - person Brendan Delumpa; 24.12.2011
comment
Хэш передается обратному вызову, в данном случае handleAction - person Paul; 24.12.2011
comment
@SweetWisherツ, первый параметр в trigger — это событие (в данном случае "action"). Любые дополнительные параметры, передаваемые функции, могут быть захвачены как параметры обработчика событий (см. backbonejs.org/#Events-trigger< /а>). - person Dykotomee; 02.05.2017