我正在编写一个非常复杂的
JavaScript应用程序,它具有使用Prototype的
Class
支持和模块模式实现的MVC架构.该应用程序使用AJAX和Observer模式.当DOM加载时,我创建我的控制器实例,传递一个视图,并从JSON数据中创建一些模型,并将其移除.
但是,我发现我必须将控制器实例作为Window对象的属性设置.声明它不使用var – 因为我有一个AJAX成功回调,刷新控制器拥有的视图对象,在代码中,我的好的小MVC世界不在范围内.
我调查了将视图对象作为参数传递给包含AJAX代码的函数,但这样做非常混乱,会导致对MVC模式的一些可怕的违规,例如耦合模型和视图.很可怕
解决方法
在窗口对象上设置属性等效于创建全局变量.也就是说,有时这样做是不可避免的,但是您应该尝试将其保持在最低限度,因为它最终会污染全局命名空间.
在你的情况下,创建一个属性并不那么糟糕.如果您要特别小心,您可以为需要全局访问的任何内容显式创建一个命名空间:
// In init: var mynamespace = {}; . . . // Once the controller is available: var namespace = window.mynamespace; namespace.controller = controller; namespace.foo = bar; // Set other stuff here as well.