Handlebars-maler støtter en rekke funksjoner som kan hjelpe deg med å gjengi teksten på riktig måte. I denne artikkelen går vi gjennom noen av de vanligste funksjonene og hvordan de kan brukes i Workiva.
Merk: Selv om vi lister opp hver funksjon separat her, kan mange av Handlebars-funksjonene "stables" eller brukes innenfor en annen funksjon.
HVER
EACH-funksjonen er den mest brukte, og er ment for behandling av JSON. Funksjonen løper gjennom et JSON-objekt eller en JSON-array. Syntaksen i funksjonen bruker en åpnings- og avslutningsblokk. Hvert element i matrisen er tilgjengelig for bruk i EACH-løkkeblokken:
{{#hver gjenstand }}
{{objektelement}}
{{/each}} I kommandoene Render Text Template og Render File Template spesifiseres JSON-objektet/-matrisen som skal behandles, i delen JSON Variables:
Navnet som er angitt i JSON Variables-delen av kommandoen, brukes i åpningsblokken EACH i malen. For en enkel JSON-array som den følgende er hver nøkkel (Priority & Owner i eksempelet nedenfor) tilgjengelig for behandling i EACH-løkken:
[
{
"Eiernavn": "Abby Steere",
"Prioritet": "Høy"
},
{
"Eiernavn": "Jeff Hickey",
"Prioritet": "High"
},
{
"Owner Name": "Ryan Niebruegge",
"Priority": "High"
},
{
"Owner Name": "Ryan Niebruegge",
"Prioritet": "Lav"
},
{
"Eiernavn": "Abby Steere",
"Prioritet": "Middels"
},
{
"Eiernavn": "Jeff Hickey",
"Prioritet": "Middels"
},
{
"Eiernavn": "Ryan Niebruegge",
"Prioritet": "Middels"
}
]
Eksempel
Oppgaveeier,Oppgaveprioritet
{{#each object_items}}
{{Eier}},{{Prioritet}}
{{/each}}
Gjengitt resultat
EACH-funksjonen kan også behandle mer komplekse JSON-objekter, inkludert objekter med nestede matriser.
Eksempel på JSON-objekt (produktliste)
{
"products": [
{
"id": 1,
"title": "iPhone 14",
"price": 799,
"brand": "Apple",
"category": "smartphones",
"images": [
"/products/1/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,
"brand": "Samsung",
"category": "smartphones",
"images": [
"/products/3/1.jpg"
]
},
{
"id": 4,
"title": "Pixel 8",
"price": 799,
"brand": "Google",
"category": "smartphones",
"images": [
"/products/4/1.jpg",
"/products/4/2.jpg",
"/products/4/thumbnail.jpg"
]
}
]
,"limit":100
,"total":4
,"hasmore":false
} Eksempel
I denne malen har vi tilgang til et element i roten (total) samt en løkke over en matrise (produkter) med elementer:
JSON Object has {{response.total}} items:
{{#each response.products}}
{{title}}
{{/each}} Gjengitt resultat
UNLESS og @FIRST / @LAST
UNLESS-funksjonen kombineres ofte med operatorene @FIRST eller @LAST for å kontrollere den endelige gjengivelsen.
Når du for eksempel oppretter en kommaseparert liste over verdiene som skal itereres, er det unødvendig å sette komma etter det siste elementet i listen. Ved å kombinere UNLESS og @LAST kan man enkelt generere en kommaseparert liste som ikke avsluttes med komma.
Eksempel
{{#each response.products}}{{tittel}}{{#unless @last}},{{/unless}}{{/each}} Rendert resultat ved hjelp av produktlisteobjektet
IF / ELSEIF / ELSEIF / ELSE og EQUAL
Med IF-, ELSEIF- og ELSE-funksjonene kan du legge til logikk i malen for å ta høyde for ulike scenarier. Bruk av IF krever ikke at ELSEIF eller ELSE brukes hvis funksjonene også kombineres med EQUAL-operatorer.
Operatoren equal kan brukes til å sammenligne tekst eller numeriske verdier. Når du sammenligner tekstverdier, må en av verdiene som er eksplisitt angitt og ikke hentet fra en variabel, omsluttes av doble anførselstegn.
Eksempel
I dette eksempelet hentes "brand" i IF-funksjonen fra JSON-variabelen. Ved kjøring erstattes variabelen med verdien i merkeelementet i objektet.
{{merke}},{{#if (lik merke "Apple")}}iOS{{else}}Android{{/if}} Rendert resultat ved hjelp av produktlisteobjektet
@KEY / THIS / @INDEX
@KEY- og THIS-funksjonene er nyttige når du samhandler med JSON-objekter der nøkkelnavnet varierer eller kanskje ikke er kjent.
Funksjonen @INDEX returnerer posisjonen til elementet som behandles i hver operasjon.
Merk: @INDEX-funksjonen er nullbasert, slik at det første elementet i listen har indeksverdien 0, det andre har indeksverdien 1, og så videre.
Eksempel på JSON-kropp
Denne brødteksten er svaret fra kommandoen Get File Properties i Workiva-kontakten:
{
"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": "V0ZVc2VyHzU1OTQwMTMxODMzMzMTE4NzI",
"version": 1
} Eksempel
{{#each properties.tags}}
{{@key}},{{{this}}}
{{/each}} Gjengitt resultat
Kombinere funksjoner
Alle funksjonene som er beskrevet i denne artikkelen, kan brukes i kombinasjon med hverandre. EACH-funksjoner kan nestes i andre EACH-funksjoner; UNLESS-, IF-, @KEY-, THIS- eller @INDEX-funksjoner kan brukes i en EACH-funksjon for å styre den gjengitte utdataen på betingede vilkår.
Eksempel
I denne malen kombineres flere funksjoner for å lage en HTML-formatert tabell:
- EACH-funksjonen brukes til å gå gjennom produktene i en løkke.
- En @INDEX brukes til å hente produktets posisjon i matrisen.
- En IF-funksjon evaluerer produktmerket og formaterer teksten på en betinget måte.
- En nestet EACH-setning behandler bildene for hvert produkt
- En UNLESS-setning legger til et linjeskift (
) etter hver bildelenke (bortsett fra den siste i listen)
| Vare-ID | Produkt | Merkevare | Pris | Bilder |
|---|---|---|---|---|
| {{@index}} | {{tittel}} | {{merke}} | {{pris}} | {{#each images}}{{this}}{{#unless @last}} {{/unless}}{{/each}} |
Gjengitt resultat
Tabellen som vises på en nettside eller i en HTML-kompatibel e-post, vises nedenfor: