注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。
辅助函数是在 Handlebars 模板中可以调用的预定义函数。辅助函数具有名称、参数和返回值。例如,模板 {{add 5 var1}}
调用 add 辅助函数,作用于一个整数(5)和一个名为 var1
的变量。如果 var1
被设为 7,那么模板的计算结果为 12。
辅助函数分为以下几类:
辅助函数不能用于 函数 编辑器中。
以下是来自 Handlebars 库的可用辅助函数。请参阅 Handlebars 文档 ↗ 以了解每个辅助函数:
以下核心辅助函数可用于查询和微件中:
toString 辅助函数使用 JavaScript String() ↗ 函数将任何给定值转换为字符串。
{{toString 'hello'}}
渲染为 "hello"{{toString 1}}
渲染为 "1"{{toString variable}}
在上下文为 { variable: ["hello", "world"] }
时渲染为 "hello,world"{{toString variable}}
在上下文为 { variable: [1, 2, 3] }
时渲染为 "1,2,3"{{toString variable}}
在上下文为 { variable: {"hello": "world"} }
时渲染为 "[Object Object]"toNumber 辅助函数使用 JavaScript Number() ↗ 函数将任何给定值转换为数字。如果该值无法转换为数字,则返回 NaN。
{{toNumber 1}}
渲染为 1{{toNumber '2'}}
渲染为 2{{toNumber 'hello'}}
渲染为 NaN{{toNumber variable}}
在上下文为 { variable: [1, 2, 3] }
时渲染为 NaN{{toNumber variable}}
在上下文为 { variable: {"hello": "world"} }
时渲染为 NaNconcat 辅助函数接收任意数量的参数,通过首先使用 JavaScript String() 函数将每个参数转换为字符串,然后将它们连接在一起。
{{concat 1 2}}
渲染为 "12"{{concat 'hello' 'world' 2}}
渲染为 "helloworld2"{{concat array1 array2}}
在上下文为 { array1: ["hello", "world"], array2: ["again", "and again"] }
时渲染为 "helloworldagainand again"{{concat 1 2 3 variable}}
在上下文为 { variable: {"hello": "world"} }
时渲染为 "123[Object Object]"substring 辅助函数接受一个输入字符串(value),以及起始位置和结束位置(非必填),然后传递给 JavaScript substring() 函数。这使您能够获取输入字符串的子字符串。
{{substring 'foo' 0 1}}
渲染为 "f"{{substring 'foo' 0 6}}
渲染为 "foo"{{substring 'foo' 1}}
渲染为 "oo"contains 辅助函数接受一个数组或字符串(value)和一个要搜索的值(searchValue),如果该值在数组中,则返回 true,否则返回 false。它通过调用 value.indexOf(searchvalue) !== -1
来实现。
{{contains variable 3}}
在上下文为 { variable: [1, 2, 3] }
时渲染为 true{{contains variable "hello"}}
在上下文为 { variable: "hello world" }
时渲染为 truejsonParse 辅助函数接受一个 JSON 字符串作为输入,并使用 JavaScript 的 JSON.parse ↗ 函数解析它。
{{jsonParse '\"foo\"'}}
渲染为 "foo"{{jsonParse varA}}
在上下文为 "[\"hello\",\"world\"]"
时渲染为 ["hello", "world"]
{{jsonParse varA}}
在上下文为 "{\"varA\":{\"hello\":\"world\",\"foo\":[\"bar\",\"baz\"]}}"
时渲染为 { varA: {"hello": "world", "foo": ["bar", "baz"]} }
{{jsonParse 123}}
在控制台抛出错误 "jsonParse: Error: value must be a string"{{jsonParse varA}}
在上下文为 "[\"hello\","
时在控制台抛出错误 "jsonParse: SyntaxError: Unable to parse JSON string"jsonStringify 辅助函数接受任何对象作为输入,并返回该对象转换为 JSON 的结果(传递给 JavaScript 的 JSON.stringify ↗ 函数)。
{{jsonStringify 'foo'}}
渲染为 "foo"
(双引号包含在渲染文本中){{jsonStringify varA}}
在上下文为 { varA: {"hello": "world", "foo": ["bar", "baz"]} }
时渲染为 {"hello":"world","foo":["bar","baz"]}
(同样,双引号包含在渲染文本中)add 辅助函数用于将两个数字相加。
{{add 20 5}}
渲染为 25{{add 10 'abc'}}
在控制台抛出错误 "value must be a number"subtract 辅助函数用于将第二个数字从第一个数字中减去。
{{subtract 20 5}}
渲染为 15{{subtract 10 'abc'}}
在控制台抛出错误 "value must be a number"multiply 辅助函数用于将两个数字相乘。
{{multiply 20 5}}
渲染为 100{{multiply 10 'abc'}}
在控制台抛出错误 "value must be a number"divide 辅助函数用于将第一个数字除以第二个数字。
{{divide 20 5}}
渲染为 4{{divide 10 'abc'}}
在控制台抛出错误 "value must be a number"max 辅助函数用于查找给定数字或数字数组中的最大值。
{{max variable}}
在上下文为 { variable: [1, 2, 3] }
时渲染为 3{{max variable 12 15}}
在上下文为 { variable: [1, 2, 3] }
时渲染为 15{{max 'hello' 123}}
在控制台抛出错误 "value must be a number or a number array"{{max variable}}
在上下文为 { variable: ["hello", "world"] }
时在控制台抛出错误 "value must be a number or a number array"min 辅助函数用于查找给定数字或数字数组中的最小值。
{{min variable}}
在上下文为 { variable: [1, 2, 3] }
时渲染为 1{{min variable 6 10}}
在上下文为 { variable: [1, 2, 3] }
时渲染为 1{{min 'hello' 123}}
在控制台抛出错误 "value must be a number or a number array"{{min variable }}
在上下文为 { variable: ["hello", "world"] }
时在控制台抛出错误 "value must be a number or a number array"eq 辅助函数比较两个数字或字符串,并检查它们是否相等
对两个数字使用 eq
{{eq 1 1}}
渲染为 true对非数字或字符串的值,或类型不同的值使用 eq
{{eq [1, 2] 5}}
在控制台抛出错误 "type mismatch"在 if 块中使用 eq
{{#if (eq name 'Steven')}}
Your name is Steven.
{{else}}
Your name is not Steven.
{{/if}}
在上下文为 { name: "Steven" }
时渲染为 "Your name is Steven."
ne 辅助函数比较两个数字或字符串,并检查它们是否不同
{{ne 1 1}}
渲染为 false{{ne [1, 2] 5}}
在控制台抛出错误 "type mismatch"lt 辅助函数比较两个数字或字符串,并检查第一个是否小于第二个。
{{lt 1 2}}
渲染为 true{{lt [1, 2] 5}}
在控制台抛出错误 "type mismatch"le 辅助函数比较两个数字或字符串,并检查第一个是否小于或等于第二个。
{{le 1 1}}
渲染为 true{{le [1, 2] 5}}
在控制台抛出错误 "type mismatch"gt 辅助函数比较两个数字或字符串,并检查第一个是否大于第二个。
{{gt 2 1}}
渲染为 true{{gt [1, 2] 5}}
在控制台抛出错误 "type mismatch"ge 辅助函数比较两个数字或字符串,并检查第一个是否大于或等于第二个。
{{ge 1 1}}
渲染为 true{{ge [1, 2] 5}}
在控制台抛出错误 "type mismatch"encodeURI 辅助函数使用 JavaScript encodeURI() ↗ 函数编码任何给定字符串。
{{encodeURI 'hello world?'}}
渲染为 "hello%20world?"{{encodeURI variable}}
在上下文为 { variable: [1, 2, 3] }
时在控制台抛出错误 "value must be a string"encodeURIComponent 辅助函数使用 JavaScript encodeURIComponent() ↗ 函数编码任何给定字符串。
{{encodeURIComponent 'hello world?'}}
渲染为 "hello%20world%3F"{{encodeURIComponent variable}}
在上下文为 { variable: [1, 2, 3] }
时在控制台抛出错误 "value must be a string"getSelectedDisplayValue 辅助函数从给定的值和 selectedValue 中获取 displayValues 的 selectedDisplayValue。
{{getSelectedDisplayValue values displayValues selectedValue}}
在上下文为 { values: [1, 2, 3], displayValues: ["a", "b", "c"], selectedValue: 2 }
返回 ["b"]
{{getSelectedDisplayValue values displayValues selectedValue}}
在上下文为 { values: "hello", displayValues: ["a", "b", "c"], selectedValue: 2 }
时在控制台抛出错误 "values must be an array"{{getSelectedDisplayValue values displayValues selectedValue}}
在上下文为 { values: [1,2,3], displayValues: ["a", "b", "c"], selectedValue: 4 }
时在控制台抛出错误 "selectedValue '4' is not in values"getSelectedDisplayValues 辅助函数从给定的值和 selectedValues 中获取 displayValues 的 selectedDisplayValues。
{{getSelectedDisplayValues values displayValues selectedValues}}
在上下文为 { values: [1, 2, 3], displayValues: ["a", "b", "c"], selectedValues: [2, 3] }
返回 ["b", "c"]
{{getSelectedDisplayValues values displayValues selectedValues}}
在上下文为 { values: "hello", displayValues: ["a", "b", "c"], selectedValues: 2 }
时在控制台抛出错误 "values must be an array"{{getSelectedDisplayValues values displayValues selectedValues}}
在上下文为 { values: [1,2,3], displayValues: ["a", "b", "c"], selectedValues: [4] }
时在控制台抛出错误 "selectedValue '4' is not in values"lookup 辅助函数使用内置 Handlebars lookup ↗ 的变体,并可以按照 Handlebars 文档中描述的使用。此外,Slate 的 lookup 变体可以描述长属性链,如下面的示例所示。
{{lookup a "b" "c"}}
在上下文为 { a: { b: { c: "test" } } }
时将返回 "test"and
辅助函数对提供的布尔参数执行 AND (&&) 逻辑比较。它至少需要两个参数。
{{and var1 var2}}
在上下文为 { var1: "true", var2: "false" }
时渲染为 "false"or
辅助函数对提供的布尔参数执行 OR (||) 逻辑比较。它至少需要两个参数。
{{or var1 var2}}
在上下文为 { var1: "true", var2: "false" }
时渲染为 "true"not
辅助函数对提供的布尔参数执行 NOT (!) 逻辑比较。它只能应用于单个参数。
{{not var}}
在上下文为 { var : "true" }
渲染为 "false"以下微件辅助函数可用于微件中:
formatNumber 辅助函数使用 Numeral.js ↗ 库将任何给定数字格式化为字符串。注意,该值必须是数字,格式必须是字符串。
{{formatNumber 1400 '0,0'}}
渲染为 "1,400"
{{formatNumber 'abc' '0,0'}}
在控制台抛出错误 "value must be a number"{{formatNumber 1400 variable}}
在上下文为 { variable: ["hello": "world"] }
时在控制台抛出错误 "format must be a string"formatDate 辅助函数使用 Moment.js ↗ 库将任何给定日期格式化为字符串。注意,该值必须是日期,格式必须是字符串。
{{formatDate '2014-1-2' 'MM/DD/YYYY'}}
渲染为 "01/02/2014"
{{formatDate 1237705200000 'YYYY-MM-DD'}}
渲染为 "2009-03-22"
{{formatDate 'some string' 'YYYY-MM-DD'}}
在控制台抛出错误 "value must be a valid date"{{formatDate '2014-1-2' variable}}
在上下文为 { variable: ["hello": "world"] }
时在控制台抛出错误 "format must be a string"以下辅助函数可用于 HttpJson Foundry 查询中。
joinParams 辅助函数接受一个参数数组,并使用 ,
连接单引号的参数。
"SELECT * FROM `table1` WHERE name IN ({{joinParams names}})"
在上下文为 { names: ["Bill", "John J.", "Sam's", "Jay"] }
渲染为
"SELECT * FROM `table1` WHERE name IN ('Bill', 'John J.', 'Sam\'s', 'Jay')"
"SELECT * FROM table1 WHERE name IN ({{joinParams name}});"
在上下文为 { name: "Bill" }
抛出错误 "parameters must be an array in joinParams helper"以下 SQL 辅助函数可用于 SQL 查询中。注意,尽管 HttpJson Foundry 查询使用 Spark SQL 语法,但不应在这些查询中使用这些辅助函数。
alias 辅助函数接受别名列或表名。列和表辅助函数会根据信息架构检查值。但是,临时列或表名不在架构中。alias 辅助函数为用户提供了一种注册临时列或表名的方法。当名称不是常量值时,会抛出错误。
使用 alias 注册别名列名
"SELECT id as {{alias 'alias_column_name'}} FROM table1 ORDER BY {{column aliasColumnName}};"
在上下文为 { aliasColumnName: "alias_column_name" }
渲染为
"SELECT id as alias_column_name FROM table1 ORDER BY alias_column_name;"
使用 alias 注册区分大小写的别名列名
"SELECT id as "{{alias 'Alias Column Name'}}" FROM table1 ORDER BY "{{column aliasColumnName}}";"
在上下文为 { aliasColumnName: "Alias Column Name" }
渲染为
"SELECT id as "Alias Column Name" FROM table1 ORDER BY "Alias Column Name";"
使用 alias 注册别名表名
"SELECT id as "{{alias 'Alias Column Name'}}" FROM table1 ORDER BY "{{column aliasColumnName}}";"
在上下文为 { aliasColumnName: "Alias Column Name" }
渲染为
"SELECT id as "Alias Column Name" FROM table1 ORDER BY "Alias Column Name";"
使用非常量值 alias:
"SELECT id as {{alias aliasColumnName}} FROM table1 ORDER BY {{table aliasColumnName}};"
在上下文为 { aliasColumnName: "alias_column_name" }
抛出错误 "Only constant parameters are not allowed..."
schema 辅助函数接受一个架构名称和一个白名单名称列表。它确保架构名称在白名单名称列表中,并根据数据源的信息表检查架构名称。当架构名称不存在于白名单名称列表或信息表中时,会抛出错误。
"SELECT * FROM {{schema schemaName 'schema1' 'schema2'}}.table1;"
在上下文为 { schemaName: "schema1" }
渲染为
"SELECT * FROM schema1.table1;"
"SELECT * FROM {{schema schemaName 'schema1' 'schema2'}}.table1;"
在上下文为 { schemaName: "schemaNameNotInList" }
渲染为
"SELECT FROM schemaNameNotInList.table1"
并在执行时抛出错误 "schema name must be in the list of the whitelist names.""SELECT * FROM {{schema schemaName 'schema1' 'schema2' templatizedName}}.table1;"
在上下文为 { schemaName: "schema1", templatizedName: "anotherSchemaName" }
渲染为
"SELECT * FROM schema1.table1;"
并在执行时抛出错误 "References ['templatizedName'] cannot be dynamic for security reasons.""SELECT * FROM {{schema schemaName 'invalidSchema1'}}.table1;"
在上下文为 { schemaName: "invalidSchema1" }
渲染为
"SELECT * FROM invalidSchema1.table1;"
并在执行时抛出错误 "Invalid schema name 'invalidSchema1.'"table 辅助函数接受一个表名和一个白名单名称列表。它确保表名在白名单名称列表中,并根据数据源的信息表检查表名。当表名不存在于白名单名称列表或信息表中时,会抛出错误。
"SELECT * FROM {{table tableName 'table1' 'table2'}};"
在上下文为 { tableName: "table1" }
渲染为
"SELECT * FROM table1;"
"SELECT * FROM {{table tableName 'table1' 'table2'}};"
在上下文为 { tableName: "tableNameNotInList" }
渲染为
"SELECT * FROM tableNameNotInList;"
并在执行时抛出错误 "table name must be in the list of the whitelist names.""SELECT * FROM {{table tableName 'table1' 'table2' templatizedName}};"
在上下文为 { tableName: "table1", templatizedName: "anotherTableName" }
渲染为
"SELECT * FROM table1;"
并在执行时抛出错误 "References ['templatizedName'] cannot be dynamic for security reasons.""SELECT * FROM {{table tableName 'invalidTable1'}};"
在上下文为 { tableName: "invalidTable1" }
渲染为
"SELECT * FROM invalidTable1;"
并在执行时抛出错误 "Invalid table name 'invalidTable1'."column 辅助函数接受一个列名或列名列表,并根据数据源的信息表进行检查。当列名不存在于信息表中时,会抛出错误。
"SELECT {{column columnName}} FROM table1;"
在上下文为 { columnName: "column1" }
渲染为
"SELECT column1 FROM table1;"
"SELECT "{{column columnName}}" FROM table1;"
在上下文为 { columnName: "Column 1" }
渲染为 "SELECT "Column 1" FROM table1;""SELECT {{column columnNames}} FROM table1;"
在上下文为 { columnNames: ["column1", "column2"] }
渲染为
"SELECT column1, column2 FROM table1;"
"SELECT {{column columnName}} FROM table1;"
在上下文为 { columnName: "invalidColumn1" }
渲染为
"SELECT invalidColumn1 FROM table1;"
并抛出错误 "Invalid column name 'invalidColumn1'."param 辅助函数接受一个参数或参数列表。在常规模式下,它将参数存储在列表中并返回问号。在预览模式下,它返回参数。注意:预览模式用于预览渲染的查询和调试。
"SELECT * FROM table1 WHERE id = {{param parameter1}};"
在上下文为 { parameter1: 1234 }
渲染为
"SELECT * FROM table1 WHERE id = ?;"
参数列表为 [1234]
"SELECT * FROM table1 WHERE text IN ({{param parameter1}});"
在上下文为 { parameter1: ["some", "text"] }
渲染为
"SELECT * FROM table1 WHERE text IN (?, ?);"
参数列表为 ["some", "text"]
"SELECT * FROM table1 WHERE text = {{param (toString parameter1)}};"
在上下文为 { parameter1: 1234 }
渲染为
"SELECT * FROM table1 WHERE text = ?;"
参数列表为 ["1234"]
"SELECT * FROM table1 WHERE text = {{param (toNumber parameter1)}};"
在上下文为 { parameter1: "1234" }
渲染为
"SELECT * FROM table1 WHERE text = ?;"
参数列表为 [1234]
"SELECT * FROM table1 WHERE text LIKE {{param (concat '%' parameter1 '%')}};"
在上下文为 { parameter1: "some text" }
渲染为
"SELECT * FROM table1 WHERE text = ?;" 参数列表为 `["%some text%"]`
"SELECT * FROM table1 WHERE id = {{param parameter1}};"
在上下文为 { parameter1: 1234 }
渲染为
"SELECT * FROM table1 WHERE id = 1234;"
"SELECT * FROM table1 WHERE text IN ({{param parameter1}});"
在上下文为 { parameter1: ["some", "text"] }
渲染为
"SELECT * FROM table1 WHERE text IN ('some', 'text');"
"SELECT * FROM table1 WHERE id = {{param parameter1}};"
在上下文为 { }
抛出错误 "Error: parameter value cannot be null in param helper""SELECT * FROM table1 WHERE text IN ({{param parameter1}});"
在上下文为 { parameter: ["some", null] }
抛出错误 "Error: parameter array cannot have null value in param helper"。