-
Notifications
You must be signed in to change notification settings - Fork 15
定义和使用常量
GU Yiling edited this page Jul 17, 2014
·
2 revisions
bat-ria
中的常量分两部分,分别来自前端定义和后端接口返回。
一般来说,设计原则是:如果常量的内容影响我们实现业务逻辑的方式,比如要实现「LAUNCHING
状态的推广计划不能删除」这样的逻辑,那我们的逻辑其实是和 LAUNCHING
这个字符串耦合的,{ LAUNCHING: '投放中' }
这样的映射后端也用不上,所以直接定义在前端即可。而有一些只有后端才知道的值,并且前端对其内容不敏感,则需要从常量接口读取,比如我们要在页面里面输出某个外部系统的 URL,但又不方便硬编码在前端代码里(测试环境和线上环境路径不同)。
bat-ria
在系统初始化的时候,会将在前端定义和从后端读取的常量合并,之后通过 bat-ria/system/constants
模块读取。初始化的时候,系统会做一些额外的初始化工作:
例如一个名为 AD_STATUS
的常量值符合这样的格式 [{ v: 'ACTIVE', l: '已启用' }, { v: 'INACTIVE', l: '未启用' }]
(对应后端 VL 类型的输出)时,会自动生成如下几种形式的数据:
-
以
v
为 key、以l
为 value 的对象,命名为[原始常量名]_MAP
,用来快速获取状态的文字描述。例如:{ ACTIVE: '已启用', INACTIVE: '未启用' }
-
将
v
/l
分别转换为value
/text
的数组,命名为[原始常量名]_DATASOURCE
,供Select
、BoxGroup
之类的控件使用。例如:[ { value: 'ACTIVE', text: '已启用' }, { value: 'INACTIVE', text: '未启用' } ]
VL 格式的常量值不得命名为 _MAP
或 _DATASOURCE
结尾,以避免冲突。
var constants = require('bat-ria/system/constants');
// 假设已经定义了 VL 格式的 `AD_STATUS`
constants.get('AD_STATUS'); // 原样输出
constants.getMap('AD_STATUS'); // v->l 的映射
constants.getDatasource('AD_STATUS'); // 转换成 value/text 格式