Marionette事件聚合器vs主干路由器

Marionette Event Aggregator vs Backbone Router

本文关键字:路由器 vs 事件 Marionette      更新时间:2023-09-26

我对这个世界很陌生,所以我需要澄清一下。也许我在这个问题上错了。所以,请随时纠正我。

我正在研究Marionette和Backbone是如何合作的。哦,是的。Marionette为我们提供了Backbone的扩展。真不错的东西。

我不清楚的是什么时候使用Backbone提供的路由机制,什么时候使用Marionette提供的发布者/订阅者模式。

有经验法则吗?

在这里,在骨干提线木偶中在哪里使用事件聚合器?,类似的讨论,但没有关于如何使用这个或另一个的建议。

我对路线管理的看法在我关于Marionette的书的免费预览中得到了解释(http://samples.leanpub.com/marionette-gentle-introduction-sample.pdf)

基本上,我的观点(其他人不一定同意)是,当用户通过URL"输入"应用程序时,Backbone的路由应该用于配置应用程序状态。换句话说,它将解析参数,并调用适当的控制器操作。

但是,一旦设置了初始状态,就不应该再触发路由代码,即使用户在应用程序中导航也是如此。

这里有一个例子:

  1. 用户输入到达"联系人/2/编辑"。主干路由代码将提取2参数,并使用该id参数调用edit控制器操作(获取该联系人、显示正确的视图等)。换句话说,正在配置初始应用程序状态
  2. 用户单击指向"联系人"URL的"显示所有联系人"链接。在这里,我认为应该通过Marionette事件来处理此修改(即指示用户希望查看所有联系人)。毕竟,我们知道用户想要做什么,以及应该显示哪个URL片段。换句话说,没有理由让路由代码参与进来

请注意,这是我的观点,其他开发人员只需在用户单击链接时传递trigger: true即可。但正如我在上面链接的摘录一书中所解释的那样,这往往会导致开发人员创建"javascript中的无状态应用程序"(例如,在URL中传递许多参数,即使它们应该存储在应用程序的状态中)。总之,Backbone的navigate方法默认为trigger: false是有原因的。

Derick Bailey(Marionette的创作者)也在这里讨论了这个问题:http://lostechies.com/derickbailey/2011/08/03/stop-using-backbone-as-if-it-were-a-stateless-web-server/

事件聚合器对于通知事件更有用。(想想小反馈)

  • 来自服务器的消息(更新的记录)
  • 让其他模特知道事情发生了变化
  • 保存时锁定所有内容直到保存
  • 时间中的单一时刻

路由器适用于您希望状态可保存的东西(想想MPA中的单独页面)

  • 模型编辑页面
  • 模型视图页面
  • 在另一个事件或活动更改之前将保留的内容

如果你不确定某件事是一个事件还是一个页面,那么思考一下,然后问另一个问题。