Подтвердить что ты не робот

Разница между событиями на марионетке

Я читаю документы marionette.js, и я не понимаю разницы между vent, reqres и commands.

Единственное, что я ясно понял, это то, что команды ничего не должны возвращать.

Может кто-нибудь объяснить это немного?

4b9b3361

Ответ 1

Пусть начинается сверху: Backbone.wreqr - это плагин Backbone, который поставляется с Marionette. Он предоставляет три шаблона обмена сообщениями для слабосвязанных приложений.

Этот ответ содержит пример кода из документа Backbone.wreqr - кредит оригинальные авторы.

События

EventAggregator объекты работают как Backbone.Events - они позволяют передавать события с именами. vent является просто общим именем переменной для объекта EventAggregator:

var vent = new Backbone.Wreqr.EventAggregator();

vent.on("foo", function(){
  console.log("foo event");
});

vent.trigger("foo");

Команды

Команды очень похожи на события. Разница семантическая - событие сообщает другим частям приложения, что что-то произошло. Команда сообщает другой части приложения что-то сделать.

var commands = new Backbone.Wreqr.Commands();

commands.setHandler("foo", function(){
  console.log("the foo command was executed");
});

commands.execute("foo");

Request/Response

RequestResponse объекты, которые часто ссылаются на переменную с именем reqres, обеспечивают слабосвязанный способ для компонентов приложения запрашивать доступ к объектам:

var reqres = new Backbone.Wreqr.RequestResponse();

reqres.setHandler("foo", function(){
  return "foo requested. this is the response";
});

var result = reqres.request("foo");
console.log(result);

Радио и каналы

В качестве удобства Wreqr предоставляет объект с именем radio, который смешивается в трех шаблонах обмена сообщениями. Команды, события и запросы могут быть сгруппированы в логические каналы для предотвращения помех. Например, вам могут потребоваться различные команды save для каналов user и document.

В марионетке

Marionette.Application создает экземпляры Commands, RequestResponse и EventAggregator внутри канала ("global" by default), используя обычные имена переменных). Если вам нужно настраивать поведение, вы можете переопределить vent, Commands и reqres.

_initChannel: function() {
      this.channelName = _.result(this, 'channelName') || 'global';
      this.channel = _.result(this, 'channel') || Backbone.Wreqr.radio.channel(this.channelName);
      this.vent = _.result(this, 'vent') || this.channel.vent;
      this.commands = _.result(this, 'commands') || this.channel.commands;
      this.reqres = _.result(this, 'reqres') || this.channel.reqres;
    },

Ссылка на источник

Я предлагаю вам более подробно ознакомиться с Wreqr docs. Я также рекомендую прочитать через анонимный источник Marionette - он краткий и очень хорошо документирован и, по сути, включает источник Wreqr.

N.B. Следующий крупный выпуск Marionnette, v3.x, заменяет Wreqr Radio. Радио обеспечивает те же функции, что и Wreqr, с более чистым API. Можно использовать Radio в приложениях Marionette 2.x, которые я рекомендую, если вы начинаете новое приложение.

Ответ 2

ReqRes Messenger

Посланник ReqRes может отправить сообщение (которое состоит из имени event, а также необязательные параметры), в цель и передать ответ обратно источнику (который будет находиться в форме возвращаемый параметр целевой функции)

Command Messenger

Посыльные Command и vent функционально очень похожи, но выполняют разные семантические обязанности.

Посланник Command используется для вызова выполнения целевой функции. Как правило, одна функция привязана к обработчику Command. Как указано в OP, в Command направление связи одностороннее, что означает, что все, что возвращает цель Command, не будет отправлено обратно источнику, входящему в Command.

vent Messenger

Наконец, vent messengers - это агрегаторы событий. Вы можете присоединить (подписать) много слушателей к vent, и все они получат событие, которое запускается (публикуется) с помощью vent. Каждый прослушиватель будет вызывать функцию, связанную с этим слушателем. Когда событие в ven t запускается, оно также может посылать каждому слушателю набор параметров.