我正在使用DHTMLX-touch框架开发移动设备应用程序,该框架基本上是javascript。
我有一个实现此功能的A类:
A.prototype.initEventHandler = function(controller) {
$$('btn_submit').attachEvent('onItemClick', controller.switchView($$('ui_ewmon_main')));
}
首次实施
对象控制器是B类的实例,B类如下:
function B() {
//back button management
this.last_view=new Array();
this.current_view=this.ewmon_view.getRoot();
this.switchView = function(next) {
this.last_view[this.last_view.length]=this.current_view;
this.current_view=next;
next.show();
}
}
使用firebug我收到此错误:
A.js:32Uncaught TypeError:Object#没有方法'switchView'
第二次实施
如果我尝试将switchView函数定义为原型函数:
function B() {
//back button management
this.last_view=new Array();
this.current_view=this.ewmon_view.getRoot();
}
B.prototype.switchView = function(next) {
this.last_view[this.last_view.length]=this.current_view;
this.current_view=next;
next.show();
}
在这种情况下,我收到以下错误:
B.js:13 Uncaught TypeError:无法读取未定义的属性'length'
任何人都可以帮助我吗?
提前致谢 达尼洛
答案 0 :(得分:3)
您通过attachEvent
的回复致电controller.switchView($$('ui_ewmon_main'))
,以获得您认为想要的结果:
A.prototype.initEventHandler = function(controller) {
$$('btn_submit').attachEvent('onItemClick', function(){ controller.switchView($$('ui_ewmon_main')); });
}
编辑:
查看您发布的代码,我希望会出现此错误。从this.current_view=this.ewmon_view.getRoot();
行可以猜测this.current_view
始终是EWmonView.prototype.getRoot
返回的对象(rigth?),但此对象没有方法show
。
但是您致电controller.switchView($$('ui_ewmon_main'));
导致this.current_view
成为$$('ui_ewmon_main')
的任何内容,在数组this.last_view
和this.current_view
中保留不同的对象类型是错误。
脏修复将是:
if (this.current_view.show) {
this.current_view.show();
} else{
$$('ui_ewmon_main').show(); //or $$('ui_ewmon_login').show() can tell what you want =)
}
代替EWmonController中this.current_view.show();
的出现位置。但是重新编写代码并让this.current_view
始终使用相同类型的对象对我来说更好。