Marionette command/comply、listento/trigger、request/reply 之间的区别

Marionette difference between command/comply, listento/trigger, request/reply

我正在处理一些遗留代码,遇到了 3 个类似的触发事件结构

  1. command/comply
    • 触发器:.command('update:mySetting', newSetting);
    • 句柄:.comply('update:mySetting', myCallback);
  2. listento/trigger
    • 触发器:.trigger('change');
    • 句柄:.listenTo(myModel, 'change', myCallback);
  3. request/reply
    • 触发器:.request('change');
    • 句柄:.reply('change', myCallback);

这些事件有什么区别,我应该在什么时候使用它们?

谢谢

注:我不确定是否全部来自marionette

https://github.com/marionettejs/backbone.radio

当您需要在发出请求时 return 一个值时使用回复。

例如

Radio.channel('global').reply('something', function() { return 'something';});

// can also be
//     Radio.channel('global').reply('something', 'something');


//... somewhere else in the code base

// someValue = 'something'
var someValue = Radio.channel('global').request('something');

您不必 return 使用 request/reply 任何东西,只需将它用作 运行 函数的一种方式。这样做会使它像 command/comply 一样工作,从而不需要 command/comply。

一个请求可以有一个回复,因此重新定义一个回复将覆盖最后一个定义。是一对一的,有回复就有对应的要求。

// before
Radio.channel('global').reply('something', function() { return 'something';});

// somewhere else, it gets changed
Radio.channel('global').reply('something', 'not something');

自行更改。

trigger/listenTo是典型的事件系统。

触发器可以从代码中的任何位置发出事件。

listenTo 允许许多侦听器侦听该事件以在触发时执行所需的操作。

Radio.channel('global').trigger('myEvent');

// somewhere in the code

view1.listenTo(Radio.channel('global'), 'myEvent', function() {
  // do something
});

// somewhere else in the code

view2.listenTo(Radio.channel('global'), 'myEvent', function() {
  // also do something
});