Я читаю документы marionette.js, и я не понимаю разницы между vent
, reqres
и commands
.
Единственное, что я ясно понял, это то, что команды ничего не должны возвращать.
Может кто-нибудь объяснить это немного?
Я читаю документы marionette.js, и я не понимаю разницы между vent
, reqres
и commands
.
Единственное, что я ясно понял, это то, что команды ничего не должны возвращать.
Может кто-нибудь объяснить это немного?
Пусть начинается сверху: 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");
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, которые я рекомендую, если вы начинаете новое приложение.
ReqRes
MessengerПосланник ReqRes
может отправить сообщение (которое состоит из имени event
, а также необязательные параметры), в цель и передать ответ обратно источнику (который будет находиться в форме возвращаемый параметр целевой функции)
Command
MessengerПосыльные Command
и vent
функционально очень похожи, но выполняют разные семантические обязанности.
Посланник Command
используется для вызова выполнения целевой функции. Как правило, одна функция привязана к обработчику Command
. Как указано в OP, в Command
направление связи одностороннее, что означает, что все, что возвращает цель Command
, не будет отправлено обратно источнику, входящему в Command
.
vent
MessengerНаконец, vent
messengers - это агрегаторы событий. Вы можете присоединить (подписать) много слушателей к vent
, и все они получат событие, которое запускается (публикуется) с помощью vent
. Каждый прослушиватель будет вызывать функцию, связанную с этим слушателем. Когда событие в ven
t запускается, оно также может посылать каждому слушателю набор параметров.