命令/遵守,listento /触发器,请求/回复之间的木偶差异

时间:2017-09-27 15:43:45

标签: javascript events backbone.js triggers marionette

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

  1. 命令/遵守
    • 触发器:.command('update:mySetting', newSetting);
    • 句柄:.comply('update:mySetting', myCallback);
  2. listento /触发
    • 触发器:.trigger('change');
    • 句柄:.listenTo(myModel, 'change', myCallback);
  3. 请求/回复
    • 触发器:.request('change');
    • 句柄:.reply('change', myCallback);
  4. 这些事件之间的区别是什么?我何时应该使用它们?

    由于

    注意:我不确定是否所有这些都来自木偶

1 个答案:

答案 0 :(得分:3)

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

当你需要在发出请求时返回一个值时,会使用

回复。

例如

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');

您不必通过请求/回复返回任何内容,只需将其用作运行函数的方法。这样做会使它像命令/遵从一样工作,这使得命令/遵守不需要。

您可以对请求进行一次回复,因此重新定义回复将覆盖最后一个定义。它是一对一的,对于回复,您有相应的请求。

// 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
});