0

このような「tbar」を備えた単純な「グリッドパネル」があります

Ext.define('Ext.abc.grid', {
     extend: 'Ext.grid.Panel',  
     type:1,    
     tbar:[
        {    
        text:'title1',
        class :'a1',                
        handler:function(type){
             if (this.type == 1) { // button not 1
            Ext.query(".a2").setDisabled(false);
                 }
        },{
            text:'title2',
        class :'a2',                
        handler:function(type){
             if (this.type == 1) { // button not 1
            Ext.query(".a1").setDisabled(false);
             }
        }
     ]
    });

クラス(a1)をボタンのタイトル1とタイトル2に追加しようとしましたが、次のようなクラスを取得すると

Ext.query(".a1").setDisabled(false);

動いていない

そして、title1 をクリックしたときに type = 1 を取得できません。this.type を使用していますが、結果は 1 ではなく「ボタン」
です​​ どうすればそれができますか、ありがとう

4

2 に答える 2

1

ここにはいくつかの問題があります。

まず、sha の回答を参照してください。 への呼び出しの結果として配列を取得していますExt.query(...)

2 つ目は、 Ext.querydiv Ext.dom.Element、img などの実際の DOM 要素を表す Ext オブジェクトである return です。アクセスしたいもの、つまりボタンはExt.Componentです。でコンポーネントをクエリできますExt.ComponentQuery

次に、this.typeボタンハンドラー関数で使用していますが、これらのメソッドが呼び出されると、設定したコンテナーではなく、thisボタン自体になります (これはオプションを使用してカスタマイズできます) 。scopetype: 1

編集:

例を機能させる方法は次のとおりです。

Ext.define('Ext.abc.Grid', {
    extend: 'Ext.grid.Panel'

    ,type: 1

    ,tbar: [{
        text: 'title1'
        ,itemId: 'button1'

        // just FYI, here the scope (this) is the window, because we are not
        // in a method
        ,scope: this // so this doesn't work

        ,handler: function() {
            // using ComponentQuery to get a reference to the other components
            var grid = this.up('grid'), // by xtype
                tbar = this.up(), // by relative position
                button2 = tbar.down('#button2'); // by itemId
            if (grid.type === 1) {
                button2.disable();
            }
        }
    }, {
        text: 'title2'
        ,itemId: 'button2'
        ,handler: function() { ... }
    }]
});

さて、あなたの心を読んで、あなたが実際にやりたいことは次のとおりです。

Ext.define('Ext.abc.Grid', {
    extend: 'Ext.grid.Panel'

    ,type: 1

    ,tbar: [{
        text: 'title1'
        ,itemId: 'button1'
    }, {
        text: 'title2'
        ,itemId: 'button2'
    }]

    // reading in your mind, I guess, this is what you really want to do:
    ,initComponent: function() {
        this.callParent();

        if (this.type === 1) {
            this.down('#button2').disable();
        } else {
            this.down('#button1').disable();
        }
    }
});
于 2013-06-05T14:39:40.750 に答える
0

Ext.query は配列を返しますhttp://docs.sencha.com/extjs/4.1.3/#!/api/Ext-method-query

setDisabled()単純に配列を呼び出すことはできません。すべての要素をループする必要があります。

于 2013-06-05T14:26:15.123 に答える