木偶事件聚合器与骨干路由器

时间:2013-08-02 16:44:41

标签: javascript backbone.js marionette publish-subscribe

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

我正在研究Marionette和Backbone如何协同工作。哦耶。 Marionette为我们提供了Backbone的扩展。非常好的东西。

对我来说不明显的是何时使用Backbone提供的路由机制以及何时使用Marionette的发布者/订阅者模式。

有没有经验法则?

这里,Where to use event aggregator in backbone marionette?,类似的讨论,但没有关于如何使用这个或其他的建议。

2 个答案:

答案 0 :(得分:5)

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

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

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

以下是一个例子:

  1. 用户输入到“contacts / 2 / edit”。骨干路由代码将提取2参数并使用该edit参数调用id控制器操作(该参数将获取该联系,显示正确的视图等)。换句话说,正在配置初始应用程序状态。
  2. 用户点击“显示所有联系人”链接,指向“联系人”网址。在这里,我相信这个修改应该通过Marionette事件处理(即表明用户想要查看所有联系人)。毕竟,我们知道用户想要做什么,以及应该显示哪个URL片段。换句话说,路由代码没有理由参与其中。
  3. 请注意,这是我的观点,其他开发人员只需在用户点击链接时传递trigger: true即可。但正如我在上面链接的书摘录中解释的那样,这往往会导致开发人员在javascript中创建“无状态应用程序”(例如,在URL中传递大量参数,即使它们应该存储在应用程序的状态中)。但是,默认情况下,Backbone的navigate方法有trigger: false

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

答案 1 :(得分:0)

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

  • 来自服务器的消息(更新记录)
  • 让其他模特知道事情已经发生了变化
  • 将所有内容锁定,同时保存至保存
  • 单个时刻的事情

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

  • 模型编辑页面
  • 模型视图页
  • 在另一个事件或活动改变之前会留下的东西

如果您不确定某件事是某个事件还是某个页面,那么请仔细考虑并提出单独的问题。