Using Sub-templates

Many templates allow you to pass sub-templates to fill out particular features. For example, to render custom calls-to-action, render content, or decide how to display lists of values.

The templates reference indicates which features can be passed a sub-template, and which can only be passed simple types.

Specifying a Sub-template

Sub-templates are specified when displaying your Instant Answer, under the options object of the templates property.

  • The name of the property is the template feature where you're inserting the sub-template.
  • The value is the reference to the template.

For example, for the Kwixer Instant Answer, the buy feature of the products_detail template is set to the custom Spice.kwixer.buy sub-template:

templates: {
    ...
    options: {
        ...
        buy: Spice.kwixer.buy
    }
}

Note that built-in sub-templates are specified as string values, and custom sub-templates are directly referenced as a function. More on these differences below.

Built-In Sub-templates

The Instant Answer framework provides several sub-templates which are available to use in particular templates. These are indicated, where relevant, in the templates reference.

For example, the list_detail template works well when the built-in record template is set as its content feature.

Built-in sub-templates are referenced using strings. For example, the WHOIS Instant Answer sets the content feature of the list_detail template by naming it as a string:

templates:{
    ...
    options:{
        ...
        content: 'record' // a string, because the record template is built-in
    }
}

Custom Sub-templates

Your Instant Answer can supply its own custom-made sub-templates.

Custom handlebar sub-templates are placed in the share/INSTANT_ANSWER_TYPE/INSTANT_ANSWER_NAME/ folder, right next to any JavaScript or CSS files. That way, they are accessible to be compiled in the frontend. For example, the path to the Kwixer Instant Answer buy.handlebars template file is share/spice/kwixer/buy.handlebars.

Custom sub-templates are set as function references. Continuing our Kwixer example, the buy.handlebars sub-template is referenced in kwixer.js like this:

templates: {
    ...
    options: {
        ...
        buy: Spice.kwixer.buy // a function reference 
    }
}

Wondering why this is a variable path - and no '.handlebars' extension? That's because handlebars files are compiled into JavaScript functions so they can be used with data. Instead of referencing the file itself, we reference the resulting function. In this example, share/spice/kwixer/buy.handlebars is compiled and becomes available as Spice.kwixer.buy.

Using Style Guide Elements

Using Available Helpers

There are a variety of helper functions available to you to make creating sub-templates easier. Learn more about handlebars helpers.