backbone.js Marionette命令/服从、倾听/触发、请求/回复之间的区别

dphi5xsq  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(141)

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

  • 命令/服从
  • 触发器:.command('update:mySetting', newSetting);
  • 手柄:.comply('update:mySetting', myCallback);
  • 收听/触发
  • 触发器:.trigger('change');
  • 句柄:.listenTo(myModel, 'change', myCallback);
  • 请求/应答
  • 触发器:.request('change');
  • 手柄:.reply('change', myCallback);

这些事件之间有什么区别?何时应使用它们?
谢谢
注:我不确定是否都来自提线 puppet

2uluyalo

2uluyalo1#

https://github.com/marionettejs/backbone.radio
当您需要在发出请求时返回一个值时,可以使用reply。
比如说

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

你不需要用request/reply返回任何东西,只需要把它作为一种运行函数的方式,这样做会让它像command/compliance一样工作,这样就不需要command/compliance了。
一个请求可以有一个回复,所以重新定义回复将覆盖上一个定义。这是一对一的,对于一个回复,你有一个相应的请求。

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

相关问题