使用extjs4重用自定义组件

时间:2013-07-10 08:28:02

标签: extjs custom-component reusability

我在javascript文件中创建了自定义网格。我想在单独的js文件中将它作为xtype用于不同的面板。如果我在一个面板上使用它,它工作正常;但是当我使用它时,它同时在不同的面板上使用它,我在chrome开发人员工具控制台中遇到错误说:

Uncaught TypeError: Cannot read property 'isComponent' of undefined 

我的网格定义如下:

Ext.define('DataBox.view.FootNotes', {
    extend : 'Ext.grid.Panel',
    alias : 'widget.footNotes',
initComponent : function() {
    this.columns = [ {
        header : 'SL', 
        field : {
            xtype : 'checkbox',
            checked : 'true'
        }
    }, {
        header : 'Symbol',
    }, {
        header : 'Notes', 
    }, ];
    this.callParent(arguments);
}

});

并在我使用以下代码

的面板上包含网格
initComponent : function() {
    /*  this.footNotesInfoGrid = Ext.create('DataBox.view.FootNotes', {
        colspan: 2,
        border: false,
        frame: 'false'
    }); even tried this */

    Ext.apply(this,{
        items : [{
            xtype : 'footNotes',
            columnWidth : .50,
            id : 'infoFootNotesGrid',
        }]
    }
   }

我在不同的论坛讨论中尝试了许多其他方式..但我的问题仍然存在。 有人可以指出我哪里出错了吗?

1 个答案:

答案 0 :(得分:0)

不要在配置中分配创建的对象!请使用initComponent

这一行

plugins : [ Ext.create('Ext.grid.plugin.CellEditing', {
    clicksToEdit : 1
}) ],

应该放在

this.plugins = [ Ext.create('Ext.grid.plugin.CellEditing', {
    clicksToEdit : 1
}) ];

initComponent正文中的任何位置,但在调用callParent之前

修改

仍允许覆盖执行

if(!this.plugins) {
    this.plugins = [ Ext.create('Ext.grid.plugin.CellEditing', {
        clicksToEdit : 1
    }) ];
}

修改

避免使用静态id属性!框架为您处理该部分。绕过Ext.ComponentQuery代替你。它将帮助您找到您正在寻找的任何组件。