Extjs - init类属性和获取类名

时间:2013-06-05 14:16:19

标签: extjs grid

我有简单的'gridpanel'和'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)添加到按钮title1,将一些添加到title2,但是当我得到类

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

它不能正常工作

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

2 个答案:

答案 0 :(得分:1)

你在这里遇到了几个问题。

首先,看看sha的回答,你在调用Ext.query(...)后得到一个数组。

其次,Ext.query返回Ext.dom.Element,它们是Ext对象,用于表示div,img等实际DOM元素。您要访问的按钮是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();
        }
    }
});

答案 1 :(得分:0)

Ext.query返回一个数组http://docs.sencha.com/extjs/4.1.3/#!/api/Ext-method-query

您不能简单地在数组上调用setDisabled()。你需要遍历所有元素。