Marionette命令/遵守,Listento/Trigger,请求/回复之间的差异



我正在研究一些旧的代码,并且遇到了3种类似的构造以触发事件

  1. 命令/遵守
    • 触发:.command('update:mySetting', newSetting);
    • 句柄:.comply('update:mySetting', myCallback);
  2. listento/触发
    • 触发:.trigger('change');
    • 句柄:.listenTo(myModel, 'change', myCallback);
  3. 请求/回复
    • 触发:.request('change');
    • 句柄:.reply('change', myCallback);

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

谢谢

注意:我不确定它们是否来自木偶

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

最新更新