2012-07-20 26 views
2

I'm newbee在JavaScript,並有一些麻煩。我注意到,「此」對象,事件處理函數裏面是不是主類,喜歡這裏:在事件處理函數這樣的背景下ExtJS的

Ext.define('App.controls.VerticalMenu', { 
extend: 'Ext.panel.Panel', 

setMenu: function(item) { 

    "this" here, is a "VerticalMenu" 
    var theBtn = Ext.create('App.controls.VerticalMenuItem',{ 
     listeners: { 
      onOpenClose: function(btn){ 
       "this" here is a "VerticalMenuItem" 
      } 
     } 
    }); 
}, 

如何訪問此事件處理函數中的主「this」對象(VerticalMenu)?

+0

@ Derek的答案可能是最好的方法,因爲它利用了框架。我的回答是在Ext框架之外做到的「標準」方式。 – 2012-07-20 15:19:14

回答

1

J託雷斯的答案是一種方式。在Ext中,根據添加偵聽器的方式,有時可以指定範圍。

setMenu: function(item) { 

    var theBtn = Ext.create('App.controls.VerticalMenuItem',{}); 
    theBtn.on('openclose',function(btn){ 
     //what we want to do 
    }, this); // Preserves the current scope of this for use inside the handler 
}, 
+3

或'聽衆:{onOpenClose:{fn:function(btn){/ *「this」直接在「setMenu」* /}範圍內具有與「this」相同的值,範圍:this}}'。至少這是ExtJs的方式。 – Prusse 2012-07-20 15:19:14

+0

TMTOWDTI。 :)你可以像@Prusse那樣使用一個配置對象,它和我的on函數做同樣的事情。 – Derek 2012-07-20 15:22:17

2

許多人使用「我」。例如:

Ext.define('App.controls.VerticalMenu', { 
extend: 'Ext.panel.Panel', 

    setMenu: function(item) { 
     var me = this; 
     var theBtn = Ext.create('App.controls.VerticalMenuItem',{ 
      listeners: { 
       onOpenClose: function(btn){ 
        me.DoSomethingUseful(); 
       } 
      } 
     }); 
    }, 
+0

這是一個'ExtJS'的東西嗎?根據我的經驗**大多數**人使用'self'或'that'。 – Alnitak 2012-07-20 15:07:17

+0

我已經從jQuery/jQuery UI中看到過「我」了。 – 2012-07-20 15:08:45

+0

我從來沒有見過它。 FWIW你需要解釋_爲什麼需要額外的變量。 – Alnitak 2012-07-20 15:09:07