2014-02-06 49 views
0

在我的控制器中,我點擊一個按鈕後調用了以下ref和一個函數。是否有可能構造一個ref方法然後調用它?我只想在一個函數中處理很多情況,並且我希望避免if語句(因爲它在項目中是必需的,它應該是通用的)EXTJS將函數賦值給變量並動態調用它

該類型將作爲函數的參數。

 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();   
    } 
+0

我很困惑...如果'this.getSaleForm()顯示()'的作品,什麼是錯的用'var method =「get」+ type +「Form」;這[方法]()。show();'?你不想在方法名中使用parens,因爲你在查找之後調用它,並且我不認爲它會是一個全局方法,因爲它在本地作用於你的類,所以你不需要想要使用'window'。 – incutonez

+0

它的工作方式你提到! – dev

+0

然後有些東西你沒有給我們看,因爲'type'是你提供的代碼和Lorenz Meyer的答案中的一個字符串變量......除非'type'是一些特殊的保留變量,但它不應該是if你是本地的範圍。 – incutonez

回答

1

這應該是沒有問題的。嘗試是這樣的:

 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。這是關於the listener object的文檔。相反,通過在全球範圍內的this.control的,你可以通過它只是一個事件,像這樣:

this.control({ 
    'salesview #mybutton':{ 
     click: { 
      fn: function(){ 
       this.onGenericClick("Sale") 
      }, 
      scope: this 
     } 
    } 
}); 
+0

似乎有相同的結果。我得到----對象[object global]的屬性'getClientForm()'不是函數----這行是錯誤的<< this.window [method]()。show(); >>。無論如何,這就是我如何在其他帖子中看到它,如果你想調用方法 – dev

+0

你是對的。我忘了定義範圍。看看我的編輯。 –