Skip to content

Appendix E: Handlebars Usage in Formbird

1 Purpose

Handlebars is a templating language which is compatible with and can be used within a Formbird template.

The pupose of this document is to provide:

  1. An overview of the Handlebars templating language (Section 2)
  2. A description of how the Handlebars templating language can be used within a Formbird template (Section 3).
  3. Examples of using the Handlebars templating language within a Formbird template (Section 4).
  4. Links to resources and further reading on the Handlebars templating language (Section 5).

 

2 Handlebars Templating Language

The basic unit of the Handlebars templating language is the Handlebars expression.

Handlebars expressions are wrapped in double curly braces i.e. {{ some expression }}.

Expressions tell Handlebars to look up and use the value of a field or to execute helper functions (also known as Helpers).

Helpers allow you to execute simple logic, loop through arrays, manipulate data and more. Handlebars provides a number of built-in helpers such as the if conditional and the each iterator. You can also define your own Helpers.

2.1 Basic Expressions

The simplest Handlebars expression is a field name wrapped in double curly braces which tells Handlebars to look up and use the value of the field in its current context.

The Handlebars expression {{document.lastName}} means look up and use the value of the lastName field in the current Formbird document. If the lastName field is not found in the current Formbird document then no value will be used.

Note:

When using Handlebars in a Formbird template, field names within a Handlebars expression should be prefixed with the prefix that specifies the current Formbird context of the field. For example, prefixing a field name with document. (e.g. {{document.lastName}}) means look up and use the value of the field in the current Formbird document, whereas prefixing a field name with result. (e.g. {{result.lastName}}) means look up and use the value of the field in the current Formbird filter query result instance being processed..

Tables listing and describing the prefixes that can be used to specify the current Formbird context of a field can be found in Section 3.1 and Section 3.2

2.1.1 How it Works

graph TD A("FORMBIRD TEMPLATE<br/>&quot;summaryNameRule&quot;: &quot;Contact - {{document.firstName}} {{document.lastName}}&quot;") -->|Handlebars<br/>Compiler| B("function()") C("CURRENT FORMBIRD DOCUMENT<br/>&quot;firstName&quot;: &quot;James&quot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&quot;lastName&quot;: &quot;McAllan&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;") -->|"James<br/>McAllan"| B B-->|On execution|D("CURRENT FORMBIRD DOCUMENT<br/>&quot;summaryName&quot;: &quot;Contact - James McAllan&quot;<br/>&quot;firstName&quot;: &quot;James&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&quot;lastName&quot;: &quot;McAllan&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;")

In the above diagram:

  1. A Formbird Template contains a "summaryNameRule" field whose value is defined as a concatenation of the string ''contact - '' and two Handlebars expressions separated by a space i.e.
    "summaryNameRule": "Contact - {{document.firstName}} {{document.lastName}}".

  2. The current Formbird document contains the fields
    "firstName": "James",
    "lastName": "McAllan"

  3. Handlebars takes the Handlebars expression from the Formbird template and compiles it into a function.

  4. This function then executes, setting the values of Handlebars expression fields to the values of the corresponding fields in the current Formbird document.

  5. On execution of the function, the current Formbird document will have the "summaryName" field shown below:

    "summaryName": "Contact - James McAllan".

2.2 Path Expressions

Handlebars expressions can also be dot-separated paths.

Example

{{document.address.streetName}} means lookup the address field in the current Formbird document, then look up the streetName field in the result and use its value.

2.3 Block Expressions

In Handlebars, block expressions are expressions that open with {{# }} and close with {{/ }}. Each of the Handlebars built-in helpers described in Section 2.4 below are examples of block expressions.

2.4 Built-In Helper Expressions

Handlebars provides a number of built-in helpers including the if, each, unless, and with block helpers. These built-in helpers provide the ability to execute simple logic.

Most built-in helpers are block expressions i.e. they open with {{# }} and close with {{/ }}. For example the if block helper opens with {{#if}} and closes with {{/if}}.

A Handlebars helper may be followed by one or more parameters (separated by a space), as shown below:

{{#if parameter1 parameter2 ...}} Your content here {{/if}}

2.4.1 if Block Helper

The if block helper is used to conditionally execute a block of code. If the condition returns a truthy value, Handlebars will execute the block of code inside the if block. If the condition returns a falsy value, Handlebars will not excute the block of code inside the if block. The if block helper can also include an {{else}} section in order to define how to execute a falsy value.

Valid Falsy values in Handlebars are false, undefined, null, "", and [] where the latter two are the empty string and empty array respectively.

Example 1

A Formbird Template contains the Handlebars if block helper shown below:

{{#if document.countries}}Countries are present.{{else}}Countries are not present.{{/if}}

The current Formbird document contains the countries field shown below:

"countries": [
  "Australia",
  "New Zealand",
  "France"
]

On execution, the if block helper would evaluate the non-empty "countries" array as a truthy value and return the result:

Countries are present.

Example 2

A Formbird Template contains the Handlebars if block helper shown below:

{{#if document.countries}}Countries are present.{{else}}Countries are not present.{{/if}}

The current Formbird document contains the countries field shown below:

"countries": []

On execution the if block helper would evaluate the empty "countries" array as a falsy value and return the result:

Countries are not present.

Example 3

A Formbird Template contains the Handlebars if block helper shown below:

{{#if document.countries}}{{document.countries.[0]}}{{/if}}

The current Formbird document contains the countries field shown below:

"countries": [
  "Australia",
  "New Zealand",
  "France"
]

On execution the if block helper would evaluate the non-empty "countries" array as a truthy value and return the first value of the countries array:

Australia

2.4.2 unless Block Helper

The unlessblock helper is similar to the if block helper in that it is used to conditionally execute a block of code, except it operates on the falsy value i.e. the unless block helper is the inverse of the if block helper. If the condition returns a falsy value, Handlebars will execute the block of code inside the unless block. If the condition returns a truthy value, Handlebars will not execute the block of code inside the unless block. The unless block helper can also include an {{else}} section in order to define how to evaluate a truthy value.

Falsy values in Handlebars are false, undefined, null, "", and [] where the latter two are the empty string and empty array respectively.

Example 1

A Formbird Template contains the Handlebars unless block helper shown below:

{{#unless document.countries}}Countries are not present.{{else}}Countries are present.{{/unless}}

The current Formbird document contains the countries field shown below:

"countries": []

On execution, the unless block helper would evaluate the empty array as a falsy value and return the result:

Countries are not present.

Example 2

A Formbird Template contains the Handlebars unless block helper shown below:

{{#unless document.countries}}Countries are not present.{{else}}Countries are present.{{/unless}}

The current Formbird document contains the countries field shown below:

"countries": [
  "Australia",
  "New Zealand",
  "France"
]

On execution. the unless block helper would evaluate the non-empty array to a truthy value and return the result:

Countries are present.

2.4.3 each Block Helper

The each block helper is used to iterate over an array of items.

You can use {{this}} inside the each block to reference the value of the current array item being iterated over.

The following parameters can be used to provide additional information while iterating:

  • The {{@index}} parameter can be used inside the each block to access the current loop index. This index begins at 0 and increments by 1 with each iteration.
  • The {{@first}} parameter provides a boolean for implementing different logic for the first item when iterating over an array or a list of items.
  • The {{@last}} parameter provides a boolean for implementing different logic for the last item when iterating over an array or a list of items.

Example 1

A Formbird Template contains the Handlebars each block helper shown below:

{{#each document.countries}}{{@index}}: {{this}};{{/each}}

The current Formbird document contains the countries field shown below:

"countries": [
  "Australia",
  "New Zealand",
  "France"
]

On execution, the each block helper would iterate over each value of the countriesarray and return the result:

0: Australia; 1: New Zealand; 2: France;

Example 2

A Formbird Template contains a Handlebars each block helper shown below:

{{#each document.names}}
  {{#unless @last}}
    Name: {{document.firstName}} {{document.lastName}};
  {{else}}
    Name: {{document.firstName}} {{documemnt.lastName}}
  {{/unless}}
{{/each}}

The current Formbird document contains the names field shown below:

"names" : [
  {"firstName":"Mary","lastName":"McAllan"},
  {"firstName":"Reginald","lastName":"Katting"},
  {"firstName":"Emily","lastName":"Frousicker"},
  {"firstName":"Lily-Ann","lastName":"Arnott"}
]

On execution, the each block helper will iterate over each item of the names array and return the result:

Name: Mary McAllan; Name: Reginald Katting; Name: Emily Frousicker; Name: Lily-Ann Arnott

Note the unless block helper and the @last parameter were used to suffix each element of the array, except the last, with a semi-colon.

2.4.4 with Block Helper

The {{with}} block helper is similar to the if block helper in that it is used to conditionally executes a block of code, with one key difference.

Normally Handlebars first takes the Handlebars expressions from the Formbird template and compiles them into a function before evaluating the resulting function against the current Formbird document. Whereas the with block helper allows immediate access the current Formbird document.

If the condition returns a truthy value, Handlebars will immediately execute the block of code inside the with block. If the condition returns a falsy value, Handlebars will not execute the block of code inside the with block. The with block helper can also include an {{else}} section in order to define how to evaluate a falsy value.

Example

A Formbird Template contains the Handlebars with block helper shown below:

{{#with document.author}}Written by {{document.firstName}} {{document.lastName}}{{else}}Unknown Author{{/with}}

The current Formbird document contains the author field shown below:

"author": {
    "firstName": "Lily-Ann",
    "lastName": "Arnott"
  }

The with block helper would immediately access the current Formbird document and return the result:

Written By Lily-Ann Arnott

 

3 Using Handlebars in Formbird

Often the best and simplest way of delivering a particular requirement is via a Handlebars expression written within a Formbird template.

3.1 Accessing Formbird Document, Template and User Account Data

The table below describes how to use a Handlebars expression to access (i.e. look up and use) the value of a field in:

  1. The current Formbird document.

  2. The template for the current Formbird document.

  3. The component definition for the current Formbird document.
  4. The account document for the current Formbird user.
Requirement Handlebars Expression Format Resulting Behaviour Examples
1. Look up and use the value of a field in the current Formbird document. {{document.field name}} Prefixing the field name with document. tells handlebars to look up and use the value of the field in the current Formbird document. {{document.lastName}}
This will look up and use the value of the lastName field in the current document.
2. Look up and use the value of a field in the template for the current Formbird document. {{tpl.field name}} Prefixing the field name with tpl. tells handlebars to look up and use the value of the field in the template for the current Formbird document. {{tpl.documentId}}
This will look up and use the value of the documentID field in the template for the current document.
3. Look up and use the value of a field in the component definition for the current Formbird document. {{tplItem.field name}} Prefixing the field name with tplItem. tells handlebars to look up and use the value of the field in the component definition for the current Formbird document. {{tplItem.name}}
This will look up and use the value of the name field in the component definition for the current Formbird document.
4. Look up and use the value of a field in the account document for the current Formbird user. ((account.field name)) Prefixing the field name with account. tells handlebars to look up and use the value of the field in the account document for the current Formbird user. {{account.userName}}
This will look up and use the value of the userName field in the account document for the current Formbird user.

{{account.systemHeader.summaryName}}
This will look up and use the value of the systemHeader.summaryName field in the account document for the current Formbird user.

3.2 Accessing Formbird Query Results

The table below describes how to use a Handlebars expression to access the results of a Formbird filter query.

Requirement Handlebars Expression Format Resulting Behaviour Examples
1. Look up and use value of a field in the current Formbird filter query result instance being processed. {{result.field name}} Prefixing the field name with result. tells handlebars to look up and use value of a field in the current Formbird filter query result instance being processed. {{result.pipe_dia}}
This will look up and use the value of the pipe_dia field in the current Formbird filter query result instance being processed.

{{result.systemHeader.summaryName}}
This will look up and use the value of the systemHeader.summaryName field in the current Formbird filter query result instance being processed.
2. Return and use the total count of results returned by a Formbird filter query. {{resultsCount}} This expression tells handlebars to return and use the total count of results returned by a Formbird filter query. If a Formbird filter query returned an array of 20 results/documents, then the Handebars expression {{resultsCount}} would return the integer value 20.
3. Return and use the array index of the current Formbird filter query result instance being processed. {{resultsIndex}} This expression tells handlebars to return and use the array index of the current Formbird filter query result instance being processed. Upon processing the 16th of a total of 20 Formbird filter query results, the {{resultsIndex}} would return the integer value 16.
4. Return and use the full set of results returned by a Formbird filter query. {{results}} This expression tells handlebars to return and use the full set of results returned by a Formbird filter query.

Example

A sc-selected-asset component with a tooltip field defined as:

"tooltips": "Displaying Pipes of type {{document.filterPipes}} Pipe #{{resultsIndex}} of {{resultsCount}} size {{result.pipe_dia}} mm <a href='/form/{{result.documentId}}' target='_blank'>{{result.systemHeader.summaryName}}</a> Current User {{account.systemHeader.summaryName}} viewing {{tplItem.name}}"

would generate and display a tooltip field as shown below:

3.3 Block Helpers in Formbird

The Handlebars built-in helpers described in Section 2.4 (i.e. the if, each, unless, and with block helpers) can be used to execute simple logic in Formbird.

In addition, the custom Handlebars block helpers described below have been created for use in Formbird and can also be used to execute simple logic.

3.3.1 ifEquals Block Helper

The ifEquals block helper is used to compare two values for equality and then execute a block of code based on the result. If the two values are equal, Handlebars will execute the block of code inside the ifEquals block. If the two values are not equal, Handlebars will not execute the block of code inside the ifEquals block.

The ifEquals block helper opens with {{#ifEquals}} and closes with {{/ifEquals}}.

Example

{{#ifEquals result.status 'Complete'}}
  <i class='material-icons'>done</i>
{{/ifEquals}} {{result.status}}

In this example the value of the status field in the current Formbird filter query result instance being processed will be compared to the text value 'Complete'. If the values are equal then Handlebars will execute the block of code inside the ifEquals block and display the "done" materials-icon, a space and the text "Complete" i.e.

Appendix-E-Handlebars-ifEquals-Example-Image-1

3.3.2 ifNotEquals Block Helper

The ifNotEquals block helper is used to compare two values for inequality and then execute a block of code based on the result. If the two values are not equal, Handlebars will execute the block of code inside the ifNotEquals block. If the two values are equal, Handlebars will not execute the block of code inside the ifNotEquals block.

The ifNotEquals block helper opens with {{#ifNotEquals}} and closes with {{/ifNotEquals}}.

Example

{{#ifNotEquals result.status 'Complete'}}
  Work Ongoing
{{/ifNotEquals}} {{result.status}}

In this example the value of the status field in the current Formbird filter query result instance being processed will be compared to the text value 'Complete'. If the values are not equal then Handlebars will execute the block of code inside the ifNotEquals block and display the text "Work Ongoing"

3.3.3 switch, case and default Block Helpers

The switch block helper is used to define a value to be tested, the case and default block helpers are used to define the possible values and their associated code blocks. If the switch block helper value matches a case block helper value, then Handlebars will execute that case block helper's code block. If the switch block helper value does not match a case block helper value, then Handlebars will execute thedefault block helper's code block.

Example

The optional cellTemplate field of a sc-datatables component can be used to define a custom template for styling the cell data of an individual data table column.

The cellTemplate field definition below will test the result.status field value to determine which icon to display together with the result.status field value.

cellTemplate: 
<div>
  <i class='material-icons'>
   {{#switch result.status}}
      {{#case 'Complete'}}
        done_outline
        {{/case}}
      {{#case 'Pick Up'}}
        directions_car
        {{/case}}
      {{#case 'Closed'}}
         cancel
         {{/case}}
      {{#case 'In Progress'}}
        play_circle_filled
        {{/case}}
      {{#default 'add_circle'}}
        {{/default}}
    {{/switch}}
  </i>
  <span>{{result.status}}</span>
</div>

In this example the result.status field (in the current Formbird filter query result instance being processed) will be tested against four possible values defined by the four case block helpers. When the result.status field value matches a case block helper value, then Handlebars will execute that case block helper's code block, in this case display its named icon along side the result.statusfield value. When no case block helper values match, then Handlebars will execute the default block helper's code block.

Column "Test 3" of the data table below demonstrates how the resulting column cell data would display.

Appendix-E-Handlebars-switch-Example-Image-1

3.4 Date Helpers in Formbird

The custom Handlebars helpers described below have been created for use in Formbird and can be used to manipulate and format time values for display.

3.4.1 dateFormat Helper

The dateFormat helper allows a specified time value to be formatted using moment.js style formatting strings. Click here for a table of formatting options.

Example

{{dateFormat result.systemHeader.createdDate 'ddd, D MMM YYYY'}}

This would format and display the value of the systemHeader.createdDate field in the current Formbird filter query result instance being processed as say: Fri, 25 Oct 2024

Example

{{dateFormat result.systemHeader.createdDate 'dddd, Do MMMM YYYY, h:mm:ss a'}}

This would format and display the value of the systemHeader.createdDate field in the current Formbird filter query result instance being processed as say: Friday, 25th October 2024, 10:38:28 pm

3.4.2 dateFromNow Helper

The dateFromNow helper allows a specified time to be formatted using relative scale language from the current time (i.e. from now). The output is a string denoting the time that has passed between the time specified and the current time. Click here for a table of which string is displayed for each length of time.

Example

{{dateFromNow result.systemHeader.serverUpdatedDate}}

If the value of the systemHeader.serverUpdatedDate field in the current Formbird filter query result instance being processed was:

  • 33 minutes ago then it would display as: 33 minutes ago
  • 4 days ago then it would display as: 4 days ago
  • 27 days ago then it would display as: a month ago
  • 329 days ago then it would display as: a year ago

3.4.3 dateToNow Helper

The dateToNow helper allows a specified time to be formatted using relative scale language to the current time (i.e to now). The output is a string denoting the time to pass between the time specified and the current time. It is similar to the dateFromNow helper, but gives the opposite interval. Click here for a table of which string is displayed for each length of time to now.

Example

{{dateToNow result.systemHeader.serverUpdatedDate}}

If the value of the systemHeader.serverUpdatedDate field in the current Formbird filter query result instance being processed was:

  • 33 minutes ago then it would display as: in 3 minutes
  • 4 days ago then it would display as: in 4 days
  • 27 days ago then it would display as: in a month
  • 329 days ago then it would display as: in a year

3.4.4 dateCalendar Helper

The dateCallendar helper allows a specified time to be formatted using relative scale language from the current date, but does so slightly differently than the dateFromNow helper. Click here for a table of which string is displayed depending on how close the date is to the current date.

Example

{{dateCalendar result.systemHeader.serverUpdatedDate}}

If the value of the systemHeader.serverUpdatedDatefield in the current Formbird filter query result instance being processed was:

  • Last week then it would display: Last Saturday at 3:31 PM
  • The day before then it would display: Yesterday at 3:31PM
  • The same day then it would display: Today at 3:31PM
  • The next day then it would display: Tomorrow at 3:31PM
  • The next week then it would display: Sunday at 3:31PM
  • Everything else then it would display as say: 2/12/2019

3.4.5 dateAdd Helper

The dateAdd helper adds (or subtracts) a specified value to (or from) a time. A second parameter is used to set the unit of measure (e.g. 'minutes', 'hours', 'days', 'weeks', etc.). Click here for a table of the options for specifing the unit of measure.

Example

{{dateAdd result.startDate 1 'weeks'}} or for brevity {{dateAdd result.startDate 1 'w'}}

This would add 1 week to the value of the startDate field in the current Formbird filter query result instance being processed.

3.5 Using Handlebars in sc-datatables

See Section 3 Using Handlebars in sc-datatables of the sc-datatables component documentation.

3.6 Using Handlebars in sc-static-html

See Section 3 Using Handlebars in sc-static-html of the sc-static-html component documentation.

3.7 Using Handlebars in Mapping components

Handlebars functions can be used in sc-address-map, sc-street-address and sc-selected-asset
The setup is largely the same as with sc-datatables in terms of specifying functions (handlebarsHelpers), watching fields (updateWatchFields), passing parameters etc. The main exception is that any query only returns data necessary for the component (not the complete document) - 'additional' fields need to be specified by defining an 'additionalQueryFields' array.

"additionalQueryFields": [
    "type",
    "appTags",
    "systemType"
],

This is defined either in the layer (for that query), or at the root of the component (for the main query).
All filters and most of the formatting options accept handlebars functions. Refer to Appendix B: layers field documentation.

3.8 Client Script Overlay

Editing handlebars functions inline can be difficult once the function becomes more than a couple of lines long. To assist in editing handlebars functions you can use the Client Script Overlay template by appending /916d66b0-7dda-11ea-a1d9-53ac176796aa to your template. Use the dropdown to choose the field/function to edit the function. Note the function must exist on the template first, so it's recommended to set up the structure first and then edit using the overlay.

Example :

"handlebarsHelpers": [
        {
            "name": "myFunction",
            "function": "function(arg) { }"
        }
    ]

IMPORTANT: Do not edit the template using the template editor while editing using the Client Script Overlay (or vice versa) without first reloading the page to ensure the changes have been refreshed.

 

4 Examples

Example 1

Requirement

In this example, the Formbird document is required to:

  1. Have its summaryName field value set to the concatenation of "Property - " with the values of each of its street address fields i.e. its unitNo, streetNo, street, suburb and postcode fields.
  2. Handle street addresses that don't have a unitNo or a streetNo value so that the unitNo and " - " and streetNo are skipped.

Solution:

Define Formbird template to include the summaryNameRule field shown below:

"summaryNameRule": "Property - {{#with addressGeo.features.[0].properties}}{{#if unit_No}}{{unit_No}} - {{/if}}{{#if streetNo}}{{streetNo}} {{/if}}{{street}}, {{suburb}}, {{postcode}}{{/with}}"

Result

If the current Formbird Document contained the fields shown below:

{
    "systemHeader": {
        "systemType": "document",
        "templateId": "cd02a730-6b11-11e9-98c0-e92fbfb6142f",
        "keyIds": [
         ],
        "createdDate": "2019-07-11T07:53:04.028Z",
        "createdBy": "65be85d0-66b8-11e7-b9f2-8fcf6a56c9da",
        "serverUpdatedDate": "2019-07-11T07:53:04.028Z",
        "serverCreatedDate": "2019-07-11T07:53:04.028Z",
        "versionId": "e99a35c0-a3b0-11e9-b25d-1d82576c71d1",
        "currentVersion": true,
    },
    "documentId": "e915ea92-a3b0-11e9-b25d-1d82576c71d1",
    "addressGeo": {
        "type": "FeatureCollection",
        "features": [
            {
                "type": "Feature",
                "properties": {
                    "type": "street",
                    "unit_No": "",
                    "streetNo": "600",
                    "street": "SNEYDES ROAD",
                    "suburb": "WERRIBEE",
                    "postcode": "3030",
                    "state": "VIC"
                },
                "geometry": {
                    "type": "Point",
                    "coordinates": [
                        144.68618641755836,
                        -37.897783153444955
                    ]
                }
            }
        ]
    },
    "status": "Active"
}

Then the with block helper would immediately access its street address fields and and include the summaryName field shown below in the current Formbird document:

"summaryName": "Property - 600 SNEYDES ROAD WERRIBEE, 3030"

 

5 Resources and Further Reading

Listed below are a few more resources and articles if you wish to dig deeper into the Handlebars templating language: