我正在使用BackboneJS和RequireJS构建一个不那么小的应用程序,我有时会发现自己想要访问一些对象(比方说:某个实例化的视图#1),来自另一个远在应用程序的对象层次结构树(例如,完全不相关的视图#2实例的子子视图)。
有一个很好的做法来实现这一目标吗?以某种方式:
a)不涉及在对象创建时跨不同对象传递参数
b)不打破似乎规定RequireJS良好做法的“无全局”范式
在我看来,选项a)使代码变得非常难以处理,因为应用程序变大了。并且难以理解,因为您需要不断追踪所有这些参数引导您的地方。
选项b(使用全局变量)是全有或全无。如果我使用一个全局,我可以使用一个大的全局命名空间我的所有应用程序,我会错过其中一个,我认为,最重要的RequireJS功能。
答案 0 :(得分:0)
在我的应用中,我有最多3级的层次结构。我正在初始化视图时传递选项,如下所示。
var view = new ChildView({dropdown: this.dropdowm});
并在ChildView中以这样的方式访问。
this.options.dropdown
这是Backbone.js中规定的方式。有时,对于“客户ID”,“产品ID”等属性,我不会将它们传递给层次结构中的每个级别。我初始化一个名为App
的全局对象,并将这些属性附加到App
,如下所示。
var App = {};
App.cutomerId = "12";
因此,我可以在我的应用中的任何位置访问App.customerId
等客户ID。
但我没有将观点/模型直接附加到App
。因为,通过随处访问您的视图/模型很容易打破您的应用。其他开发人员可以在您的应用中的任当您调试某些错误时,它会变得更加复杂,因为他可能已经在您的所有应用程序中使用了该模型。这比跟踪this.options
更复杂。因此,您应该了解应该将哪些内容纳入全球范围。