浏览 4553 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-05
问题描述 使用DWR+EXT构建AJAX应用,希望把单个页面的所有javascript函数放在一个叫做XXXController的对象中,这个XXXController可能继承一个抽象基类,包含所有页面都可能使用的通用功能。示例代码如下: js 代码
所有针对页面的处理函数都放在Controller对象中,各方法功能如下:
上述代码在双击节点时会报错如下: js 代码
经过分析,错误是因为handlerUsers方法是做为DWREngine的方法执行的,因此在handlerUsers方法里调用this.onSelectUser给树节点添加事件时,找不到方法,因为此时的this是DWREngine的实例,而不是Controller实例。 该死的DWR没有考虑回调函数的调用上下文问题!!!! 有什么变通的解决办法可以达成我的目的呢?难道只能把这些都放在全局范围不成? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-07-05
把this bind到你的function上去。
即 var self = this; f1 = function(){self.f0();} |
|
返回顶楼 | |
发表时间:2007-07-06
我在调试的时候,也用过这个方法,到是可以解决问题,不过总感觉有点别扭,必须把一个实例传递到类的方法里,才能完成方法调用。 假定对这个实例的名称进行了重构,岂不是所有的方法都要改? 或者是另一个类需要调用此实例的方法,又如何处理呢? |
|
返回顶楼 | |
发表时间:2007-07-06
实际上你需要的是把一个function变成一个delegate。
|
|
返回顶楼 | |
发表时间:2007-07-06
hax 写道 把this bind到你的function上去。
即 var self = this; f1 = function(){self.f0();} 楼上说的应该是这个意思吧: 使用闭包特性可以解决,也就是不要用prototype的对象构造方法,而是把上述代码添加构造函数里,如: function Controller() { var self = this; handleUsers:function(users){ self.onSelectUser(); } onSelectUser:function(Node){ } } |
|
返回顶楼 | |