Javascript EXTJS将函数分配给变量并动态调用它

Javascript EXTJS将函数分配给变量并动态调用它,javascript,controller,extjs4,Javascript,Controller,Extjs4,在我的控制器中,我有以下ref和一个函数,我在单击按钮后调用它。是否可以构造一个ref方法,然后调用它?我只想在一个函数中处理许多情况,我想避免if语句(因为它是项目中所必需的,应该是通用的) 该类型将作为函数的参数 refs : [{ ref : 'saleForm', selector : 'sale saleform' }], init: function () { th

在我的控制器中,我有以下ref和一个函数,我在单击按钮后调用它。是否可以构造一个ref方法,然后调用它?我只想在一个函数中处理许多情况,我想避免if语句(因为它是项目中所必需的,应该是通用的)

该类型将作为函数的参数

     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
是您拥有的某个特殊保留变量,但如果您是本地作用域,则不应该是。它只是缺少一个参数