ExtJS 5.0 - 重写initComponent以自定义组件

时间:2015-08-12 17:12:20

标签: javascript extjs override extjs5 overrides

我正在尝试在覆盖中访问表单的组件以自定义它们。我已确认itemId == 'name'itemId == 'description',但此代码仅提取undefined

Ext.define('Products.overrides.view.NewProduct', {
    override: 'Products.view.NewProduct',
    initComponent: function() {
        // Set up first
        this.callParent([]);
        // Revise the maximum lengths
        this.getComponent('name').maxLength = 50;
        this.getComponent('description').maxLength = 250;
    }
});

namedescription的类型是单行文本条目,但它们可能会更改为其他内容。我已经尝试了各种方法来获得这些组件但没有成功。我看过query建议,但我可能无法保证组件类型,所以不确定这是否有用。

这应该不是那么困难,有什么我想念的吗?

2 个答案:

答案 0 :(得分:1)

您可以使用以下方法检索:

val components = this.query('*[itemId=name]');

然后作为第一个元素访问:

components[0].maxLength = 50;

星号可以让您与任何组件类型匹配。您可能想要检查数组的长度。如果它不止一个,则项目ID不是唯一的。

答案 1 :(得分:-1)

如果要覆盖initComponent函数,则必须调用callParent()函数。

Ext.define('Products.overrides.view.NewProduct', {
    override: 'Products.view.NewProduct',
    initComponent: function() {
        // Set up first
        this.callOverridden();
        // Revise the maximum lengths
        this.getComponent('name').maxLength = 50;
        this.getComponent('description').maxLength = 250;
        this.callParent();
    }
});

ExtJS 5.0文档:http://docs.sencha.com/extjs/5.0/5.0.0-apidocs/#!/api/Ext.Component-method-initComponent