Javascript EXTJS将函数分配给变量并动态调用它
在我的控制器中,我有以下ref和一个函数,我在单击按钮后调用它。是否可以构造一个ref方法,然后调用它?我只想在一个函数中处理许多情况,我想避免if语句(因为它是项目中所必需的,应该是通用的) 该类型将作为函数的参数Javascript EXTJS将函数分配给变量并动态调用它,javascript,controller,extjs4,Javascript,Controller,Extjs4,在我的控制器中,我有以下ref和一个函数,我在单击按钮后调用它。是否可以构造一个ref方法,然后调用它?我只想在一个函数中处理许多情况,我想避免if语句(因为它是项目中所必需的,应该是通用的) 该类型将作为函数的参数 refs : [{ ref : 'saleForm', selector : 'sale saleform' }], init: function () { th
refs : [{
ref : 'saleForm',
selector : 'sale saleform'
}],
init: function () {
this.control({
'salesview #mybutton':{
click : this.onSaleClick
}
});
},
onSaleClick : function(){
//this.getSaleForm().show();//works
var type = "Sale";
var method = "get"+type+"Form()";
this.window = window;
this.window[method]().show();
}
这应该是没有问题的。试着这样做:
init: function () {
this.control({
'salesview #mybutton':{
click : function(){
this.onGenericClick("Sale")
}
},
scope: this
});
},
onGenericClick : function(type){
var method = "get"+type+"Form()";
this.window = window;
this.window[method]().show();
}
您必须定义侦听器的作用域才能引用此。这是关于你的医生。您可以只为一个事件传递作用域,而不是在this.control
中全局传递作用域,如下所示:
this.control({
'salesview #mybutton':{
click: {
fn: function(){
this.onGenericClick("Sale")
},
scope: this
}
}
});
似乎也有同样的结果。我得到----对象[object global]的属性'getClientForm()'不是函数----这一行是错误的。不管怎样,这就是我在其他帖子中看到的,如果你想调用该方法,我很困惑。。。如果
this.getSaleForm().show()
有效,那么执行var method=“get”+type+“Form”有什么不对;此[方法]().show()代码>?您不希望在方法名称中使用paren,因为您在查找它之后调用它,而且我认为它不会是一个全局方法,因为它在本地作用于您的类,所以您不希望使用窗口
。它按照您提到的方式工作!还有一些东西你没有展示给我们,因为在你提供的代码和Lorenz Meyer的答案中,type
都是一个字符串变量。。。除非type
是您拥有的某个特殊保留变量,但如果您是本地作用域,则不应该是。它只是缺少一个参数