ExtJS 6.2单例工具类如何设置短别名实现无全路径前缀调用?
ExtJS 6.2 短名调用单例工具类合规实现方案
alias 不生效的原因
alias属性仅为Ext类管理器提供内部别名,仅支持Ext.createByAlias('util.math')这类Ext内部API调用,不会自动将类挂载到全局作用域,因此无法直接通过util.math调用。
合规实现方案
方案1:Application启动阶段统一挂载全局快捷方式(最推荐)
该方案符合ExtJS应用生命周期规范,所有全局挂载操作统一在入口处理,便于后续维护和冲突排查。
- 工具类正常按项目命名空间定义:
Ext.define('MyAPP.Util.math', { singleton: true, // 你的工具方法 sqrt: function(x) { return Math.sqrt(x); } });
- 在Application的
launch钩子中统一挂载全局快捷入口:
Ext.define('MyAPP.Application', { extend: 'Ext.app.Application', name: 'MyAPP', requires: [ 'MyAPP.Util.math', 'MyAPP.Util.string' ], launch: function () { // 初始化全局命名空间,避免覆盖已有同名对象 window.util = window.util || {}; // 挂载对应工具类 util.math = MyAPP.Util.math; util.string = MyAPP.Util.string; return this.callParent(arguments); } });
配置完成后即可在业务代码中直接使用util.math.sqrt(x)调用。
方案2:直接定义工具类到目标命名空间
如果不需要保留MyAPP.Util.math这类完整项目命名空间的类名,可以直接将类定义到目标短命名空间下,不属于向后兼容场景,完全符合规范:
// 提前注册全局命名空间,避免定义报错 Ext.ns('util'); Ext.define('util.math', { singleton: true, sqrt: function(x) { return Math.sqrt(x); } });
该方案无需额外挂载操作,定义完成即可直接调用。
内容的提问来源于stack exchange,提问作者user5507535
相关产品推荐
相关产品推荐

