码匠客服

JavaScript 表达式

当在码匠中构建应用程序时,您可以通过在 {{ }} 中编写自定义的 JavaScript 表达式来访问、操作页面上所有可用的数据,以及全局变量。

访问数据

在码匠中,任何在 {{ }} 中的内容都会被解析成 JavaScript 表达式,您可以使用其获取 UI 组件暴露的字段、获取查询的状态与结果、访问全局变量,等等。在一个应用内,组件、查询、全局变量等都有全局唯一名称,如 input1query1table1(您也可以自定义其名称)。您可以通过它们的名字,在应用内任何地方访问它们所暴露的数据,如 {{input1.value}} {{query1.data}},您还可以通过表达式 {{table1.selectedRow.userName}} 访问表格 table1 当前选中行的 userName 信息,当 table1 选中行发生变化时,表达式所对应的值也就相应发生变化。

您可以获取和使用任何所创建查询相关联的数据。如下图,在查询编辑器区创建了一个查询 query3,然后点击运行按钮,运行成功后,查询返回的结果数据会在查询编辑器区上方进行预览,也可以在左侧面板的查询列表中看到同样的结果。

访问对象中的数据

在码匠中,组件、查询和全局变量等都是对象,针对这些对象它们都有内置方法或者属性,当编写 Javascript 表达式时,如果您在对象名后添加一个 .,会触发弹出一个自动推荐填充 (autosuggest) 菜单或称为自动补全 (autocomplete) 菜单,提示该对象的方法或者属性,可以通过上下键进行选择。

访问数组中的数据

数组中的值用目标的索引来访问。索引总是从 0 开始,因此可以使用 array[0] 访问数组的第一个元素。例如:

操作数据

您可以在 {{ }} 中,使用 JavaScript 语法以及第三方库,对组件、查询对外暴露的数据进行各种抽取和转换操作。 假设想让字符串小写,表达式可写作:{{input1.value.toLowerCase()}};对一个值加 10,表达式可写作: {{input1.value + 10 }};让日期按照您想要的格式呈现,表达式可写作:{{moment(table1.selectedRow.date_column).format('YYYY-MM-DD')}};您甚至可以实现更复杂的操作,比如,对数组对象建立一个映射,并返回其中的一个键值,表达式则可写作:{{query1.data.map(i => i.name)}}。 组件可以绑定数据并随着数据计算结果变化同步更新。例如,拖拽一个 table1 组件到画布上,选中组件,在右边的属性面板中绑定组件的数据为 query1.data,则 table1 组件中会自动填充 JavaScript 表达式获取的数据。

{{ }} 中编写 JavaScript 的限制

在码匠中使用 {{ }} 书写 JavaScript 需要满足一定的语法规范,其支持的代码具体如下:

单行的代码/函数,例如:map/reduce 结合箭头函数、三目运算符,等等。

{{query1.data.id.length}} // ✅ 单行值引用

{{query1.data.map(row => row.id)}} // ✅ map+箭头函数

{{ num1 > num2 ? num1 : num2 }} // ✅ 三目运算符

下面这些写法是不合法的 {{ }} 表达式写法,您可以创建转换器来编写如下的多行代码:

{{ 
    const array = query1.data;
    const filterArray = array.filter(it => it.value > 10);
    return filterArray; // ❌
}}
{{ 
    if (select.value === "1") {  
        return "Option 1";
    }
    if (select.value === "2") {
        return "Option 2";
    }
    return "Option 3"; // ❌
}}

查看数据

对于 JavaScript 表达式,您会关注它的输入与输出值以及它们的展示,在码匠中您可以轻松地查看这些数据。可以根据需求以 3 种主要的方式在码匠中查看数据:查询结果预览(下方面板)、数据浏览器面板(左侧面板)查看和实时值预览(输入框下方面板)。

查询结果预览数据浏览器查看实时值预览
形式表格结构化 JSON 展示JSON String
是否展示数据类型
位置查询运行成功后,展示在查询编辑器区上方数据浏览器(左侧面板)输入 JavaScript 表达式后,实时展示在输入框下方
示例