我正在处理一些遗留代码,并且遇到了3个用于触发事件的类似构造
.command('update:mySetting', newSetting);
.comply('update:mySetting', myCallback);
.trigger('change');
.listenTo(myModel, 'change', myCallback);
.request('change');
.reply('change', myCallback);
这些事件之间的区别是什么?我何时应该使用它们?
由于
注意:我不确定是否所有这些都来自木偶
答案 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
});