为什么不调用类的方法

时间:2013-03-28 20:30:52

标签: model-view-controller extjs tabs extjs4

我有一个TabContainer类。此类是Ext.tab.Panel的扩展。 创建工作正常,但是,当我尝试向实例Firebug发送消息时说:

  

“TypeError:tbbar.canAddTab不是函数”

课程是:

Ext.define('KMA.view.environment.TabContainer',{
    extend: 'Ext.tab.Panel',
    alias: 'widget.environmenttabcontainer',

    initComponent: function(){
        [...]
        this.callParent(arguments);
    },
    createTab: function(aTitle,aToolTip,anItem){
        return {
            title: aTitle,
            itemId: aTitle + "Tag",
            tabconfig: {
                title: aTitle,
                tooltip: aToolTip,
                items: anItem
            }    
        };
    },
    openTabs: function(){
        return this.getItems().length;
    },
    maxOpenTabs: function(){
        return 7;
    },
    canAddTab: function(){
        return (this.openTabs() < this.maxOpenTabs());
    },
    addTab: function(aTabCfg){
        this.add(aTabCfg);
    }
});

我的示例代码是:

var tbbar = Ext.ComponentQuery.query('environmenttabcontainer');
console.log(tbbar);
console.log(tbbar.canAddTab());

在第一个“console.log”中,Firebugs显示了TabContainer的实例,并显示了该类的方法。但是,为什么不工作?有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我猜它不起作用,因为Ext.ComponentQuery.query返回一个数组。 这有效:

var t = new KMA.view.environment.TabContainer();
Ext.ComponentQuery.query('environmenttabcontainer')[0].canAddTab
 > function (){
         return (this.openTabs() < this.maxOpenTabs());
    }

您是否有理由使用组件查询而不是直接引用?