【问题标题】:Marionette Event Aggregator vs Backbone RouterMarionette 事件聚合器与骨干路由器
【发布时间】:2013-08-02 16:44:40
【问题描述】:

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

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

对我来说不太明显的是什么时候使用 Backbone 提供的路由机制,什么时候使用 Marionette 提供的发布者/订阅者模式。

有什么经验法则吗?

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

【问题讨论】:

    标签: javascript backbone.js marionette publish-subscribe


    【解决方案1】:

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

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

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

    这是一个例子:

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

    请注意,这是我的意见,其他开发人员只需在用户单击链接时传递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 非常好的解释。您能否更好地解释一下当用户通过 URL “进入”应用程序时 是什么意思?我不清楚这意味着什么。是的!我已经从 LeanPub 买了你的书 ;-)
    • 基本上,用户在地址栏中键入 URL,从其他地方单击链接或书签等,这会加载 Marionette 应用程序(并执行 MyApp.start())。这就是我所说的“进入”应用程序。之后,应该不会再有任何路由事件,只有 URL 更新。
    【解决方案2】:

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

    • 来自服务器的消息(更新记录)
    • 让其他模型知道事情发生了变化
    • 在保存之前锁定所有内容
    • 瞬间的事情

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

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

    如果您不确定某事是事件还是页面,请考虑一下并提出单独的问题。

    【讨论】:

    • 感谢您的重播。但是你能解释一下你对路由器的好处是什么意思吗?我不清楚。
    • 来自源代码 // Marionette Controller // --------------------- // // 一个多用途对象,用作// 模块和路由器的控制器,并作为工作流的调解者 // 和其他对象、视图等的协调。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多