extjs中事件处理函数中的这个上下文

时间:2012-07-20 15:02:38

标签: javascript extjs

我是javascript中的新手并且有些头疼..我注意到“this”对象,在事件处理函数内部不是主类,就像这里:

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)?

2 个答案:

答案 0 :(得分: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();
                }
            }
        });
    },

答案 1 :(得分:1)

J Torres的回答是单向的。在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
},