扩展与覆盖

覆盖:

覆盖文件:

Ext.define('MyApp.override.CornField',
    override: 'Ext.form.field.Text',
    initComponent: function () {
        this.callParent(arguments);
        this.setValue('Corn!');
    }
);

在 app 中使用:

{
    xtype: 'textfield'
}

扩展:

覆盖文件:

Ext.define('MyApp.form.field.CornField',
    extend: 'Ext.form.field.Text',
    alias: 'widget.cornfield',
    initComponent: function () {
        this.callParent(arguments);
        this.setValue('Corn!');
    }
);

在 app 中使用:

{
    xtype: 'cornfield'
}

说明

ExtJS 提供了两种主要方法来改变现有类的行为:扩展它们并覆盖它们。每个都有使用前应考虑的好处和陷阱。

扩展

扩展类会创建一个新类,该类从其父级继承其行为和配置。通过扩展创建新类,可以在中心位置进行重复配置和行为更改,并在整个应用程序中重复使用。扩展的最大优点是父类保持完整,可用于不需要扩展行为的简单用例。

扩展的良好用例示例包括具有特殊行为的自定义表单字段,专用模式和一般的自定义组件。

覆盖

覆盖类会修改现有类的行为。覆盖中的配置和方法完全替换它们的父类对应物,创建在整个应用程序中填充的新默认配置和行为。由于其使用的破坏性,应谨慎使用覆盖; 扩展类通常可以提供相同的好处,同时保持父类不受干扰。

但是,在某些情况下,覆盖可以提供好处。良好的用例包括修复现有类中的错误,修改代理行为以将额外信息附加到请求(例如令牌或会话数据),并且通常强制特定行为成为应用程序中的默认行为。