Handlebars 模版支援多種功能,可協助正確呈現您的文字。在這篇文章中,我們將介紹一些最常見的函數,以及如何在 Workiva 中使用它們。
註: 雖然我們在此單獨列出每個函數,但許多 Handlebars 函數可以「堆疊」或在另一函數中使用。
EACH
EACH 函式最常用於處理 JSON。該函式繞過 JSON 物件或陣列;該函式的語法使用一個開啟和關閉區塊。陣列中的每個元素都可在 EACH 循環區塊中進行操作:
{{#each object }}
{{object element}}
{{/each}} 在渲染文本模板 和渲染文件模板 命令中,要处理的 JSON 对象/数组在 JSON 变量部分中指定:
命令中 JSON 變數部分指定的名稱用於模板的 EACH 開頭區塊。 對於簡單的 JSON 陣列,例如下面的陣列,每個 key (Priority &Owner 在下面的範例中) 都可以在 EACH 環路中處理:
[
{
"Owner Name":"Abby Steere",
"Priority":"High"
},
{
"Owner Name":"Jeff Hickey",
"Priority":"High"
},
{
"Owner Name":"Ryan Niebruegge",
「優先級」:"High"
},
{
"Owner Name":"Ryan Niebruegge",
「優先級」:"Low"
},
{
"Owner Name":"Abby Steere",
「優先級」:"Medium"
},
{
"Owner Name":"Jeff Hickey",
「優先級」:"Medium"
},
{
"Owner Name":"Ryan Niebruegge",
「優先級」:"Medium"
}
]
範例
任務擁有者,任務優先順序
{{#each物件_項目}}
{{Owner}},{{Priority}}
{{/each}}
渲染結果
EACH 函式也可以處理更複雜的 JSON 物件,包括具有巢狀陣列的物件。
範例 JSON 物件 (產品清單)
{
"products":[
{
"id":1,
"title":"iPhone 14",
"price":799,
「品牌」:"Apple",
"category":"smartphones",
"images":[
"/products/1/1.jpg",
"/products/1/2.jpg",
"/products/1/3.jpg",
"/products/1/4.jpg",
"/products/1/thumbnail.jpg"
]。
},
{
"id":2,
"title":"iPhone 15",
"price":899,
"brand":"Apple",
"category":"smartphones",
"images":[
"/products/2/1.jpg",
"/products/2/2.jpg",
"/products/2/3.jpg",
"/products/2/thumbnail.jpg"
]
},
{
"id":3,
"title":"S23 Ultra",
"price":1249,
「品牌」:"Samsung",
"category":"smartphones",
"images":[
"/products/3/1.jpg"
]
},
{
"id":4,
"title":"Pixel 8",
「價格」:799,
"brand":"Google",
"category":"smartphones",
"images":[
"/products/4/1.jpg",
"/products/4/2.jpg",
"/products/4/thumbnail.jpg"
]
}
]
, "limit":100
, "total":4
, "hasmore":false
} 範例
在這個範本中,我們存取根目錄 (total) 中的項目,並在項目陣列 (產品) 上循環:
JSON 物件有 {{response.total}} items:
{{#each response.products}}
{{title}}
{{/each}} 渲染結果
UNLESS 與 @FIRST / @LAST
UNLESS 函式最常與 @FIRST 或 @LAST 運算符結合,以控制最終的渲染輸出。
例如,在建立以逗號分隔的迭代值清單時,清單中最後一項之後就不需要逗號。結合 UNLESS 和 @LAST,就可以輕鬆地產生一個不以逗號結束的逗號分隔清單。
範例
{{#each response.products}}{{title}}{{#unless @last}},{{/unless}}{{/each}} 使用產品清單物件渲染結果
IF / ELSEIF / ELSE 和 EQUAL
IF、ELSEIF 和 ELSE 函數允許在範本中加入邏輯,以考量不同的情況。如果函數也結合 EQUAL 運算符,則 IF 的使用不需要使用 ELSEIF 或 ELSE。
equal 運算符可用於比較文字或數值。比較文字值時,如果其中一個值是明確指定且不是從變數擷取,則必須用雙引號括住。
範例
在本範例中,IF 函式中的 "brand "會從 JSON 變數中擷取。執行時,變數會被物件的品牌元素中的值取代。
{{brand}},{{#if (equal brand "Apple")}}iOS{{else}}Android{{/if}} 使用產品清單物件的渲染結果
@KEY / THIS / @INDEX
@KEY 和 THIS 函數在與 JSON 物件互動時非常有用,因為 JSON 物件的 key 名稱會改變或可能不為人所知。
@INDEX 函數會返回在 each 運算中被處理的項目的位置。
注意: @INDEX 函數以 0 為基礎,因此清單中第一個項目的索引值為 0,第二個項目的索引值為 1,依此類推。
JSON 正文範例
此正文是來自Get File Properties Workiva 連接器命令的回應:
{
"created":"2023-11-20T21:02:09.000Z",
"id":"91af3ec18c554d5a81fd4ec4edc3a897",
"metadata":{
"account":{},
"amount":{
"numberFormat":",."
},
"entity":{}
},
"name":"Sample.csv",
"numRecords":3,
"originalFileSize":72,
"status":"IMPORTED",
"tableId":"d1463c30226445819b0dddf57226ccf7",
"tags":{
"WK-Chains-Source":"https://h.sandbox.wdesk.com/s/wdata/oc/app/workiva-chains/find/executor?chainId=95631\u0026chainExecutorId=4217258"
},
"updated":"2023-11-20T21:02:18.000Z",
"userId":"V0ZVc2VyHzU1OTQwMTMxODMzMTE4NzI",
"version":1
} 範例
{{#each properties.tags}}
{{@key}},{{{this}}}
{{/each}} 渲染結果
組合函數
本文中概述的所有函數均可相互組合使用。EACH 函數可嵌套在其他 EACH 函數中;UNLESS、IF、@KEY、THIS 或 @INDEX 函數可在 EACH 函數中使用,以有條件地控制呈現的輸出。
範例
在此模板中結合了多個函數,以建立 HTML 格式的表格:
- EACH 函式用於迴圈檢視產品。
- @INDEX 用於擷取產品在陣列中的位置。
- 一個 IF 函式會評估產品的品牌,並有條件地格式化文字。
- 嵌套的 EACH 語句處理每個產品的圖片
- UNLESS 語句會在每個圖片連結(清單中最後一個除外)後加上換行 (
)
| 項目 ID | PRODUCT | 品牌 | 價格 | 影像 |
|---|---|---|---|---|
| {{@index}} | 標題 | {{brand}} | 價格 | {{#each images}}{{this}}{{#unless @last}} {{/unless}}{{/each}} |
渲染結果
在網頁或 HTML 相容的電子郵件中檢視的結果表格顯示如下: