我正在编写一个相当复杂的JavaScript应用程序,它具有MVC架构。我使用Prototype的 Class
支持和模块化模式实现了这个架构。该应用程序使用 AJAX 和观察者模式。当DOM加载完成时,我创建控制器实例,将视图以及从JSON数据创建的一些模型传递给它,然后它开始工作。
然而,我发现我必须将我的控制器实例设置为 Window
对象的属性,即不使用 var
声明,因为我有一个AJAX成功回调函数,它会刷新控制器所拥有的视图对象,在代码的这一点上,我的MVC世界已经不在范围内了。
我尝试将视图对象作为参数传递到包含AJAX代码的函数中,但这变得非常混乱,并导致了一些可怕的MVC模式违规,例如耦合模型和视图,这样做很糟糕。
像直接在 Window
上存储我的控制器实例这样的做法是否被认为是不好的形式呢?这有点像使用全局变量,但我看不出其他方法。
var that = this
的内容,然后将回调中所有对this
的引用更改为that
。或者,使用 Prototype 的Function.bind
来修复this
的值。 - MooGoo