Skip to content

定义和使用常量

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 类型的输出)时,会自动生成如下几种形式的数据:

  1. v 为 key、以 l 为 value 的对象,命名为 [原始常量名]_MAP,用来快速获取状态的文字描述。例如:

    {
        ACTIVE: '已启用',
        INACTIVE: '未启用'
    }
  2. v / l 分别转换为 value / text 的数组,命名为 [原始常量名]_DATASOURCE,供 SelectBoxGroup 之类的控件使用。例如:

    [
        { 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 格式
Clone this wiki locally