Skip to main content
Version: 2.x

Placeholders 占位符

现在推荐使用 Evaluate Placeholders 求值占位符

transform参数注入中我们都引入了 placeholder 占位符语法,它提供了在静态 storyboard 中访问及处理动态数据的能力。

示例

例如以下 transform 配置片段(yaml):

transform:
url: '?query=@{ some.field[0].path = ["complex","value"] | map : instanceId | slice : 0 : 10 }'

字段 url 中被 @{ ... } (在参数注入中为 ${ ... })包裹的部分就是占位符,它们将在运行时根据上下文信息计算得到。

以上 url 可以被分解为以下结构:

- RawString: "?query="
- Placeholder:
field: "some.field[0].path"
default:
value: ["complex", "value"]
pipes:
- identifier: map
parameters:
- "instanceId"
- identifier: slice
parameters:
- 0
- 10

在运行时,Placeholder 将根据上下文按以下流程计算得到结果:

  1. 使用 _.get(context, field) 得到 result
  2. 如果 resultundefined,那么将 default.value 赋值给 result
  3. 遍历 pipes,通过 identifier 找到对应的管道函数 pipe,将 result 作为第一个参数,parameters 作为额外参数列表,调用 pipe 并将返回值赋值给 result
  4. 返回 result

请参考 Pipes 管道

而最终 url 得到的值为所有 RawStringPlaceholder 计算得到的值通过 Array#join 拼接后的结果。

注意:Array#join 如果遇到 undefined, null 或空数组 [] 的元素,将被转换为空字符串。

注意:当某个字段仅由单个 Placeholder 组成时,将返回它原始计算得到的值,而不是 Array#join 的结果。

细节

default 默认值及 pipe parameters 管道参数语法中,可以使用 JSON value 的格式传递各种形式的值。同时为了能简化普通字符串的编写,如果要设置的值不会和 JSON value 格式冲突、且不包含特殊控制字符(|:})和空白符的字符串时,可以直接填写字面量的字符串,例如 ${QUERY.objectId=HOST}。系统在以下情况中将认为该值为 JSON value 并进行相应解析(即使解析失败):

  • 系统认为可能是数组、对象、数字类型的,即以 [ { " 或数字开头的、或以 - 开头并跟着至少一个数字的;
  • 完全等于 null false true 的。

其它情况将按 literal-string 字面量字符串解析。

注意,literal-string 仅能使用英文字母、数字、_-non-ascii 字符(即可以使用包括中文在内的其它字符)。field 除了上述字符外,还可以使用 .*[]

图解

以下图解参考 https://www.json.org/json-en.html

图解 placeholders

ws: 和 JSON 定义里的 whitespace 一致,即空字符串或连续的空白字符。

变更历史

组件版本变更
brick_next1.15.12支持在占位符中使用 JSON value 类型的默认值,给管道配置参数,加入空白符