0

我有像这样的'tbar'的简单'gridpanel'

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)添加到按钮title1和一些title2,但是当我得到类时

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

它不工作

当我点击title1时我无法获得type = 1,我使用this.type但结果是'button'而不是1
我该怎么做,谢谢

4

2 回答 2

1

你这里有几个问题。

首先,请参阅 sha 的回答,作为调用的结果,您将获得一个数组Ext.query(...)

其次,Ext.queryreturns Ext.dom.Element,它们是用于表示实际 DOM 元素(如 div、img 等)的 Ext 对象。您想要访问的内容,您的按钮,是Ext.Component. 您可以使用 查询组件Ext.ComponentQuery

然后,您this.type在按钮处理函数中使用,但是当这些方法被调用时,this将是按钮本身(可以使用scope选项自定义),而不是您设置的容器type: 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 回答