我一直在阅读Backbone Fundamentals并且一直在计划在新项目中使用中介和外观模式,但是在阅读时我想知道为什么不能仅仅使用应用程序主路由器对象,或任何将Backbone.Events扩展为中介的对象,而不是实现书中概述的订阅和发布方法。
现在Backbone 0.9.9的文档明确提到使用Backbone对象(现在从Backbone.Events扩展)作为全局事件总线,我对此更加好奇。任何人都可以澄清这是否是一个好的选择,如果不是为什么?
答案 0 :(得分:5)
我认为使用Backbone
根对象作为调解器没有任何问题。将应用程序的主路由器用作事件总线并不一定是个好主意,因为这需要路由器实例可以全局访问应用程序的每个部分。使用Backbone根对象在很大程度上避免了这个陷阱,因为它已经是一个全局单例实例。
如果有人希望真的寻找不使用Backbone
作为调解员的理由,您可以说这样做会将所有发布商和订阅者都联系到Backbone
,从而降低了消费者代码的可移植性。此外,您将无法控制所公开的界面。在AMD / Module模式中,这意味着您必须将Backbone导入到没有业务访问Backbone
根对象的模块。
我不认为这是一个问题,因为您的应用程序很可能完全依赖于Backbone。但是如果你感到偏执,你可以使用Backbone.Events
实现而不暴露全局对象:
//mediator.js
define(['backbone', 'underscore'], function(Backbone, _) {
return _.extend({}, Backbone.Events);
});
在这种情况下,消费者只依赖于接口,而不是实现,并且可以通过实现on
,off
和{{1来改变介体调解器的实现细节方法你自己。