javascript - Backbone . radio : what's the advantage of commands and requests over events

标签 javascript backbone.js marionette backbone-events

似乎 Backbone.Radio 提供了 2 个新的抽象 - 命令和请求。它们与 Backbone.Events 几乎相同,只是它们只能有 1 个订阅者。是这样吗?如果是的话,它们比事件有什么优势?

如果有帮助,我计划将 Backbone.Events/Radio 与 React.js 一起使用。

最佳答案

我实际上没有使用过 Backbone.Radio,但确实广泛使用了 Backbone.wreqr https://github.com/marionettejs/backbone.wreqr它提供几乎相同的命令服务。

在我的使用中,事件和命令之间的区别是:

要使事件起作用,事件的发送者和接收者必须都存在并相互引用,并且接收者必须能够正确处理事件。这在应用程序的不同部分同时运行的完全异步浏览器环境中通常会出现问题。

命令允许您解耦发送者和接收者。一个对象,比方说 View A,可以简单地发送命令“update_user_details”。

我的第二个对象 View B 为“update_user_details”设置了一个命令处理程序,它将更改屏幕上的用户详细信息。

但是,如果 View B 尚不存在或尚未呈现怎么办。在事件监听器模式中,您必须确保 View A 存在,它会将对自身的引用传递给 View B,然后您在 View B 中附加一个事件监听器。

使用命令这不是问题, View A 发送一个命令,如果没有人设置处理程序那么没有什么不好的事情发生,命令什么都不做。

当 View B 完全独立于 View A 出现时,它会设置一个处理程序并将响应所有 future 的命令。

关于意图的最后一点:

事件模式可以这样想:我,View A 刚刚做了一些事情,任何感兴趣的人(事件监听者)都可以为所欲为,我 View A 不关心你做什么.

在命令模式中:我想A希望有人做某事,我不在乎是谁做的,我只希望它正确完成。

关于javascript - Backbone . radio : what's the advantage of commands and requests over events,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29642157/

相关文章:

javascript - 在 React 中更新组件数据

javascript - 在集合中移动主干模型的最佳实践

backbone.js - 如何将最新帖子放在主干顶部

javascript - Backbone + Marionette - 模型/集合的内存管理最佳实践?

javascript - 是否可以访问 cookie 而不将其发送到请求 header 中?

javascript - 缺少CORS 400接头(其他问题)

backbone.js - 何时使用 bindTo、绑定(bind)或与 Backbone.Marionette 一起使用?

javascript - 在嵌套 JSON (BackboneJS) 中按父节点动态过滤

javascript - Vuetify动态创建v-select

javascript - 使用 requirejs 的句柄 block 辅助函数(在数组的每一行上添加简单的奇偶属性)