码匠客服

转换器 (Transformer)

转换器 (Transformer) 支持编写多行 JavaScript 代码,帮助我们实现查询/组件/临时状态等数据的转换以及方法的复用。与 JavaScript 表达式 {{ }} 不同,转换器支持多行 JS 代码。与 JavaScript 查询不同,转换器中只支持只读操作,不能修改引用数据的值或者触发查询等。此外,转换器依赖的数据变化时,它的值将自动更新

快速上手

点击查询编辑器面板的新建->转换器

新建之后可以编写 JS 语句,点击预览可以预览代码运算的结果,最后的返回值将成为转换器的值 (transformer1.value),可以在应用内被引用:

💡 说明

查询/组件或者全局状态中的数据,如:input1.value query1.data state1.value 等,在转换器中时可以直接引用,无需加 {{ }}

数据只读

转换器中不能修改查询/组件/临时状态的值,也不能触发查询等,如需上述功能可以编写 JS 查询

如下所示,transformer1 希望将 restApiQuery 的数据按照 age 字段排序并返回,因为 sort 方法会修改原始数据 restApiQuery.data,所以报错。

此处可以使用 lodash_.orderBy() 方法:

使用举例

编写注释

// 后编写注释:

//返回用户姓名
return currentUser.name

返回数据

要从转换器返回数据,请使用return 语句:

const val = input1.value
return val * 5

转化时间戳格式

将查询返回的数据 query1.data 时间列 start_time 的时间戳,利用 moment().format() 函数转换为 YYYY-MM-DD 格式:

return query1.data.map(it => {
    return {
        ...it,
        start_time: moment(it.start_time).format('YYYY-MM-DD')
    };
})

使用查询数据

对查询数据做运算

要对查询得到的对象数组中的部分数据做运算,可以使用 map() 函数。如下,对查询返回的对象数组的 price 列所有数据做 +5 运算:

const data = query1.data
return data.map(x => x.price + 5)

对 API 查询结果排序

使用 ._orderBy() 函数可以对数据进行排序,下面代码可以将 query4 的数据按照 amount 列的升序返回:

return _.orderBy(query4.data, 'amount', 'asc')

合并查询数据

使用转换器可以将多个查询的结果合并到一个表格中,可以使用 _.zipWith() 函数:

var sqlData = query1.data;
var apiData = query2.data;

return _.zipWith(
    sqlData,
    apiData,
    (sql, api) => Object.assign({}, api, sql)
)