Javascript Backbone.js共享上下文模型

Javascript Backbone.js共享上下文模型,javascript,backbone.js,global-variables,Javascript,Backbone.js,Global Variables,我们有一个backbone.js应用程序,它需要一个共享的上下文模型来存储应用程序的环境变量,它可以在多个视图中触发事件。一种简单的方法是跨多个视图使用相同的模型,就像一个全局对象一样。但是这种设计有两个问题:第一,使用全局变量似乎是一种糟糕的设计模式;其次,它强制所有视图使用相同的模型,这在视图之间产生了不希望的强耦合,即使每个视图都可以设置为侦听模型属性的子集 我正在考虑的一个解决方案是,子视图可以拥有自己的模型,并将此共享上下文模型作为其属性之一 我不熟悉backbone.js,所以我想知

我们有一个backbone.js应用程序,它需要一个共享的上下文模型来存储应用程序的环境变量,它可以在多个视图中触发事件。一种简单的方法是跨多个视图使用相同的模型,就像一个全局对象一样。但是这种设计有两个问题:第一,使用全局变量似乎是一种糟糕的设计模式;其次,它强制所有视图使用相同的模型,这在视图之间产生了不希望的强耦合,即使每个视图都可以设置为侦听模型属性的子集

我正在考虑的一个解决方案是,子视图可以拥有自己的模型,并将此共享上下文模型作为其属性之一

我不熟悉backbone.js,所以我想知道人们正在使用哪些其他替代解决方案

看一看,它包含一个全局事件聚合器,是great Backbone.Marionette库的一部分


然后,您可以在视图之间共享事件聚合器实例,并让它们侦听从环境变量模块触发的事件

创建一个全局事件总线怎么样?如果需要,任何视图都可以在其中订阅/发布事件。这似乎是个不错的选择。唯一的问题是,事件总线或事件聚合器需要逐个详细定义事件总线、事件名称、提供者和使用者,而共享模型对象更简单,因为我们可以将所有内容都放在对象中。嗯……你真的不需要这样做。您可以轻松定义一个简单的事件对象(例如,
App.Events
)并通过
this.listenTo(App.Events,'eventname',this.eventHandler)
订阅,或通过
App.Events.trigger('eventname',[event data])
App发布事件。事件不必知道任何关于名称、提供者或使用者的信息。