You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ExtJS3.4.0重写Ext.Button的OnRender事件报callParent不支持错误如何解决

ExtJS 3.4 重写Ext.Button的onRender方法报错解决方案

错误原因

  • callParent是ExtJS 4.0及更高版本才提供的API,用于在重写/继承组件时调用父类同名方法,ExtJS 3.4版本不存在该方法,因此调用会抛出不支持的错误。

正确实现代码

ExtJS 3.x中需要直接调用父类原型的对应方法,同时透传所有入参保证原逻辑正常执行,你可以根据需求选择以下任意一种写法:

写法1:直接调用父类方法

Ext.override(Ext.Button, {
    onRender: function (ct, position) {
        // 调用父类原生onRender逻辑
        Ext.Button.superclass.onRender.call(this, ct, position);
        
        // 权限控制逻辑,替换为你实际的session取值逻辑
        const hasPermission = session.yourPermissionKey;
        this.setDisabled(!hasPermission);
        
        console.log('do something');
    }
});

写法2:缓存原生方法调用(兼容性更强)

// 缓存原生onRender方法避免父类继承链变更导致的异常
const originalButtonOnRender = Ext.Button.prototype.onRender;
Ext.override(Ext.Button, {
    onRender: function (ct, position) {
        // 执行原生逻辑,自动透传所有入参
        originalButtonOnRender.apply(this, arguments);
        
        // 权限控制逻辑
        const hasPermission = session.yourPermissionKey;
        this.setDisabled(!hasPermission);
        
        console.log('do something');
    }
});

注意事项

  • 重写组件原生方法时必须透传原方法的所有入参,onRender方法原生需要传入容器对象ct和渲染位置position两个参数,省略会导致按钮渲染异常。
  • 权限取值逻辑请替换为你项目中实际从session对象中获取对应按钮权限的代码。

内容的提问来源于stack exchange,提问作者Salman Rafique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:15:03