2

私は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)にアクセスするにはどうすればよいですか?

4

2 に答える 2

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();
                }
            }
        });
    },
于 2012-07-20T15:04:51.667 に答える
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
},
于 2012-07-20T15:11:42.363 に答える