gpt4 book ai didi

events - Marionette 事件之间的区别

转载 作者:行者123 更新时间:2023-12-03 23:26:14 25 4
gpt4 key购买 nike

我正在阅读 marionette.js 文档,但我不明白 vent 之间的区别, reqrescommands .

我唯一清楚地理解的是命令不应该返回任何东西。

谁能解释一下?

最佳答案

让我们从顶部开始:Backbone.wreqr是 Marionette 附带的 Backbone 插件。它为松散耦合的应用程序提供了三种消息传递模式。

此答案包括来自 Backbone.wreqr 的示例代码文档 - 归功于 original authors .

事件
EventAggregator对象的工作方式类似于 Backbone.Events - 它们启用命名空间事件处理。 vent只是 EventAggregator 的通用变量名目的:

var vent = new Backbone.Wreqr.EventAggregator();

vent.on("foo", function(){
console.log("foo event");
});

vent.trigger("foo");

命令

命令与事件非常相似。区别在于语义 - 事件通知应用程序的其他部分发生了某些事情。命令指示应用程序的另一部分做某事。
var commands = new Backbone.Wreqr.Commands();

commands.setHandler("foo", function(){
console.log("the foo command was executed");
});

commands.execute("foo");

请求/响应
RequestResponse对象,通常由名为 reqres 的变量引用,为应用程序组件请求访问对象提供了一种松耦合的方式:
var reqres = new Backbone.Wreqr.RequestResponse();

reqres.setHandler("foo", function(){
return "foo requested. this is the response";
});

var result = reqres.request("foo");
console.log(result);

电台和 channel

为方便起见,Wreqr 提供了一个名为 radio 的对象。它混合了三种消息传递模式。命令、事件和请求可以分组到逻辑 channel 中以防止干扰 - 您可能需要不同的 save user 的命令和 document channel ,例如。

在 Marionette
Marionette.Application创建 Commands 的实例, RequestResponseEventAggregator在 channel 内( "global" by default) 使用常规变量名称。如果您需要自定义行为,您可以覆盖 ventcommandsreqres 变量。
_initChannel: function() {
this.channelName = _.result(this, 'channelName') || 'global';
this.channel = _.result(this, 'channel') || Backbone.Wreqr.radio.channel(this.channelName);
this.vent = _.result(this, 'vent') || this.channel.vent;
this.commands = _.result(this, 'commands') || this.channel.commands;
this.reqres = _.result(this, 'reqres') || this.channel.reqres;
},

Link to source

我建议你阅读 Wreqr docs了解更多详情。我还建议通读 Marionette annotated source - 它简洁且有据可查,事实上,它包括 Wreqr 源。

注: Marionette 的下一个主要版本 v3.x 将 Wreqr 替换为 Radio . Radio 通过更简洁的 API 提供与 Wreqr 相同的功能。可以 use Radio in Marionette 2.x applications ,如果您正在启动一个新应用程序,我建议您这样做。

关于events - Marionette 事件之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27483811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com