ExtJS 5.0 - 覆盖 initComponent 以自定义组件

ExtJS 5.0 - overriding initComponent to customize components

我正在尝试访问覆盖中的表单组件以自定义它们。我已确认 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 的建议,但我可能无法保证组件类型,所以不确定这是否有用。

这应该不难,是不是我遗漏了什么?

如果要覆盖 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

您可以使用此检索:

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

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

components[0].maxLength = 50;

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