Action(动作)

Model中可以声明一组Action。Action事实上是Javascript的Function。把动作封装成Action的主要目的是供表达式使用。例如SPAN可以绑定到一个Action以显示其执行的返回值;Button的onclick事件可以绑定到某个Action以便在点击时自动调用它。

普通Function

定义普通的Action的方式如下:

model.action({
    showMessage: function() {
        ...
    },
    checkNickName: function() {
    }
});

也可以简单的通过下面的方式来定义,不过此种简单的定义方式只能用于普通Function型Action。

model.action.showMessage = function() {
    ...
};

内置Action

Cola中包含一些系统级的Action供我们直接使用,我们称这些Action为内置Action。目前已支持的内置Action如下:

  • default(value,defaultValue)

    如果value的值等价于逻辑false则返回defaultValue,否则返回value自身。null、false、0、""都会被认为是逻辑false。

  • int(value)

    将传入的值转换整数,如果转换失败则返回0。

  • float(value)

    将传入的值转换浮点数,如果转换失败则返回0。

  • is(value)

    将传入的值转换成逻辑值。

  • bool(value)

    同is()。

  • not(value)

    用于对传入的值进行逻辑非运算。

  • isEmpty(value)

    用于判断传入的值是否为空。此方法对于各种类型的value值有不完全相同的处理逻辑:

    • Array - 如果长度为0则认为是空。
    • cola.EntityList - 如果其entityCount属性为0则认为是空。
    • String - 如果长度为0则认为是空。
    • 其他情况下则当其值为null或undefined时才认为是空。
  • isNotEmpty(value)

    与isEmpty(value)的结果相反。

  • len(value)

    获得Array或EntityList的长度。

  • upperCase(str)

    将字符串转换为大写。

  • lowerCase(str)

    将字符串转换为小写。

  • resource(key, param1, param2, ...)

    用于返回cola中定义的国际化资源,其具体用法可以直接参考cola.resource()方法的API文档。

  • formatNumber(num, format)

    用于对数字进行格式化输出。例如: formatNumber(1234.5678, '$#,##0.00')将输出$1,234.57

  • dateNumber(date, format)

    用于对日期进行格式化输出。例如: formatDate(birthday, 'yyyy-MM-dd')将输出1991-09-01这样的格式。

  • filter(list, criteria, caseSensitive, strict)

    用于对集合型数据进行过滤。 filter支持三个参数:

    • criteria 过滤条件,字符串或JSON对象。
    • caseSensitive 逻辑值,表示是否对大小写敏感。此参数可省略。
    • strict 逻辑值,表示是否按照严格模式进行字符串匹配,即是否启用全文匹配。此参数可省略。

    如果criteria是字符串,表示用该值匹配对象中的每一个属性(如果集合中的对象本身就是一个值而非对象,那么则直接匹配该值)。

    如果criteria是一个JSON对象或JSON对象的数组,那么上面的caseSensitive和strict将是失效,同时它的格式应该是这样的:

    {
      name: { //属性名,如果属性名为"#MARKDOWN-CONTENTquot;表示要匹配每一个属性
          value: "b", //要匹配的值
          caseSensitive: true //非必须
      },
      gendar: {
          value: "male",
          strict: true //非必须
      }
    }
    

    例如: filter(employees, 'b')表示过滤出所有名字或其它属性中带有字母b的员工。 filter(employees, 'Tom', false, true)表示过滤出所有名字或其它属性值为Tom的员工,忽略字母的大小写。

  • sort(list, comparator, caseSensitive)

    用于对集合型数据进行排序。 sort支持两个参数:

    • comparator 排序条件,字符串或JSON数组。
    • caseSensitive 逻辑值,表示是否对大小写敏感。此参数可省略。

    如果comparator是字符串,表示是一个属性名,即按照此属性进行排序。如果第一个字符为'+'或'-'表示正向或逆向的排序。 例如: sort(employees, 'age')表示按照age从小到大排序。 sort(employees, '-age')表示按照age从大到小排序。 如果集合中数据本身就是一个值而非对象,则可以省略上面的属性名,比如: sort(names, '-')表示逆向排序names中的值。

    如果comparator是JSON对象,那么它的格式应该是这样的:

    [
      { prop:"age", desc:true }, //按照age逆向排序
      { prop:"gender" }
    ]
    

    另外comparator还接受两个特殊的值:

    • "$none" 表示不排序。
    • "$random" 表示随机排序。例如:sort(employees, '$random')

链式表达式

TODO

自定义内置Action

如果要自定义内置Action,可以通过下面的方式:

cola.defaultAction["percent"] = function(value) {
    return (value * 100) + "%";
}

上面的示例定义了一个名为percent的内置Action,用于输出数值的百分比形式。例如percent(0.86)将输出'86%'。

一个带有参数的内置Action:

cola.defaultAction["multiply"] = function(value, num) {
    return value * num;
}

上面的例子中定义了一个名为multiply的内置Action,用于对数值进行乘法运算。例如multiply(6,3)将输出18。