Template (auto-completion)

Description

A hash of templates to be used when rendering the dataset. Note a precompiled template is a function that takes a JavaScript object as its first argument and returns a HTML string.

  • notFound - Rendered when 0 suggestions are available for the given query. Can be either a HTML string or a precompiled template. If it’s a precompiled template, the passed in context will contain query.

  • pending - Rendered when 0 synchronous suggestions are available but asynchronous suggestions are expected. Can be either a HTML string or a precompiled template. If it’s a precompiled template, the passed in context will contain query.

  • header - Rendered at the top of the dataset when suggestions are present. Can be either a HTML string or a precompiled template. If it’s a precompiled template, the passed in context will contain query and suggestions.

  • footer - Rendered at the bottom of the dataset when suggestions are present. Can be either a HTML string or a precompiled template. If it’s a precompiled template, the passed in context will contain query and suggestions.

  • suggestion - Used to render a single suggestion. Can be either a Handlebars template or a precompiled template. If it’s a precompiled template, the passed in context will contain a single suggestion.

  • group - Rendered at the top of suggestions inside a single dataset when suggestions are grouped into categories. Can be either an HTML string or a precompiled template. If it’s a precompiled template, the passed in context will contain group field, see itemGroup.

Any template must be wrapped in an HTML tag as the templated element is inserted into the DOM. If the template isn’t wrapped an error will be returned to a browser console.

Default value

template: {
    group: function(context) { return $('<div>').html(String(context.label)); },
    suggestion: function(context) { return $('<div>').html(String(context.label)); }
},
If you are using default Funnelback web service to provide suggestions, the transformation function will map the contents of the disp field into the label variable.

Examples

Display structured data for suggestion

Structured data mapped into label variable can be accessed using GPath style (dot-notation) ie. label.person.full_name, label.product etc.

Entry from CSV file containing JSON:

baking,900,{\"title\":\"Baking\"\,\"description\":\"Cooking food by surrounding it with hot\, dry air\, usually in an oven.\"\,\"listMetadata\": {\"level\":[\"beginner\"]},J,Cooking techniques,,http://www.foodista.com/technique/RNT367Z2/baking,U

A partial query for bak results in the following JSON returned by suggest.json:

[
  {
    "key": "baking",
    "disp": {"title":"Baking","description":"Cooking food by surrounding it with hot,dry air,usually in an oven.","listMetadata":{ "level":["beginner"]}},
    "disp_t": "J",
    "wt": "900",
    "cat": "Cooking techniques",
    "cat_t": "",
    "action": "http://www.foodista.com/technique/RNT367Z2/baking",
    "action_t": "U"
  }
]

Default suggestion template will render [object Object] label in a suggestion list as mapped content of disp field isn’t a string type. In this case template need to be updated to access structured data fields directly:

template: {
  suggestion: '<div>{{label.title}}<br/>level: {{label.listMetadata["level"][0]}}<br /><small>{{label.description}}</small></div>',
}

Conditional display of variables for suggestion

template: {
  suggestion: '<div>{{label.title}}{{#if label.type}} <em>({{label.type}})</em>{{/if}}<br/><small>{{label.description}}</small></div>',
}
template: {
  suggestion: '<div>{{label.title}}{{#if label.type}} <em>({{label.type}})</em> {{else if label.type2}} <em>({{label.type2}})</em> {{else}} <em>(Unknown type)</em>{{/if}}<br/><small>{{label.description}}</small></div>',
}

Display different header for empty and non-empty query

template: {
  header: function(context) {
    return $('<h4>').text(context.query ? 'Suggestions' : 'Quick Links').addClass('tt-category');
  }
}

Display alert when no suggestions found

template: {
  notFound: $('<div>').html('<em>No suggestions found</em>')
}
By default, the notFound template is wrapped with the header and footer templates. See templateMerge for details.

Display alert when waiting for receiving data

template: {
  pending: $('<div>').html('<i class="fa fa-spinner fa-pulse fa-fw"></i><span class="sr-only">Loading...</span>')
}
By default, the pending template is wrapped with the header and footer templates. See templateMerge for details.