ExtJS如何创建仅含getter或仅含setter的config配置项
ExtJS 实现仅生成单个getter/setter的config配置方案
默认ExtJS的config配置系统会为每个配置项自动生成成对的getXxx和setXxx方法,要实现仅生成单个存取方法可以用以下两种方案:
方案一:高版本ExtJS原生配置(推荐,适配ExtJS 5.1+/6.x+)
直接在配置项的定义中指定getter: false或setter: false即可关闭对应方法的生成,示例代码如下:
Ext.define('Myapp.myclass', { config: { // 仅生成setter,关闭getter生成 conf1 : { $value: true, getter: false }, // 仅生成getter,关闭setter生成 conf2 : { $value: false, setter: false } }, constructor: function(config) { // 官方推荐用initConfig完成配置初始化,会自动处理默认值合并、钩子触发等逻辑 this.initConfig(config); } });
验证逻辑:
- 实例化类后调用
setConf1(false)可正常执行,getConf1()会抛出方法不存在的错误 - 实例化类后调用
getConf2()可正常返回默认值false,setConf2(true)会抛出方法不存在的错误
方案二:低版本ExtJS兼容方案(适配ExtJS 4.x)
低版本ExtJS不支持单配置项关闭方法生成,可以手动实现需要的单个存取方法,不将配置项放入全局config中即可:
Ext.define('Myapp.myclass', { // 私有属性存储配置值 _conf1: true, _conf2: false, // 仅实现conf1的setter setConf1: function(value) { // 可自行添加自定义校验、变更触发逻辑,和原生config的apply/update逻辑对齐 this._conf1 = value; }, // 仅实现conf2的getter getConf2: function() { return this._conf2; }, constructor: function(config) { if (config && config.conf1) { this.setConf1(config.conf1); } // conf2不对外暴露修改入口,符合仅getter的需求 } });
注意事项
- 如果使用方案一时遇到方法不存在仍抛错的情况,可以在类定义中添加
$configStrict: false关闭配置方法严格校验 - 方案一关闭单个方法生成后,对应配置项的
applyXxx、updateXxx自定义钩子仍然会正常触发,不需要额外调整逻辑
内容的提问来源于stack exchange,提问作者user5507535
相关产品推荐
相关产品推荐

