0.9.9中的Backbone对象现在可以用作中介替换吗?

时间:2012-12-18 13:11:24

标签: javascript backbone.js backbone-events mediator

我一直在阅读Backbone Fundamentals并且一直在计划在新项目中使用中介和外观模式,但是在阅读时我想知道为什么不能仅仅使用应用程序主路由器对象,或任何将Backbone.Events扩展为中介的对象,而不是实现书中概述的订阅和发布方法。

现在Backbone 0.9.9的文档明确提到使用Backbone对象(现在从Backbone.Events扩展)作为全局事件总线,我对此更加好奇。任何人都可以澄清这是否是一个好的选择,如果不是为什么?

1 个答案:

答案 0 :(得分:5)

我认为使用Backbone根对象作为调解器没有任何问题。将应用程序的主路由器用作事件总线并不一定是个好主意,因为这需要路由器实例可以全局访问应用程序的每个部分。使用Backbone根对象在很大程度上避免了这个陷阱,因为它已经是一个全局单例实例。

如果有人希望真的寻找不使用Backbone作为调解员的理由,您可以说这样做会将所有发布商和订阅者都联系到Backbone,从而降低了消费者代码的可移植性。此外,您将无法控制所公开的界面。在AMD / Module模式中,这意味着您必须将Backbone导入到没有业务访问Backbone根对象的模块。

我不认为这是一个问题,因为您的应用程序很可能完全依赖于Backbone。但是如果你感到偏执,你可以使用Backbone.Events实现而不暴露全局对象:

//mediator.js
define(['backbone', 'underscore'], function(Backbone, _) {
    return _.extend({}, Backbone.Events);
});

在这种情况下,消费者只依赖于接口,而不是实现,并且可以通过实现onoff和{{1来改变介体调解器的实现细节方法你自己。