jQuery.telligent.evolution.template
The template module provides a simple client-side templating. This is useful when building UI from REST responses or other cases when it's impractical to render UI in the widget on the server side.
Usage
Defining a template
Client templates can be defined either as plain JavaScript strings or embedded in HTML rendered by a widget. When rendering in HTML, the template should be defined in a script block of type text/html.
<script type="text/html" id="hello">
<p>Hello, <%: name %>.</p>
</script>
Delimiters in the template support rendering (and optionally encoding) variables as well as embedding JavaScript logic.
The delimiter format <%= value %> renders a variable without encoding:
<p>This variable will be rendered directly without encoding <%= variableName %></p>
The delimiter format <%: value %> renders a variable after HTML-encoding it:
<p>This variable will be rendered with HTML encoding <%: variableName %></p>
The delimiter format <% %> renders nothing but allows embedding of raw JavaScript logic.
<div>
<% if (answered) { %>
<span class="answered">Answered</span>
<% } else { %>
<span class="not-answered">Not Answered</span>
<% } %>
</div>
Looping can be performed with the template helper, foreach
<ul>
<% foreach(users, function(user){ %>
<li>
<a href="<%: user.profileUrl %>">
<%= user.displayName %>
</a>
</li>
<% }); %>
</ul>
Using the template
To use a template, it must first be compiled. This transforms it from a string into an efficient function which can be passed data to template, returning a rendered string.
// given a <script type="text/html" id="hello-world"> ... </script>
var helloWorldTemplate = $.telligent.evolution.template.compile('hello-world');
// alternatively, a raw template string can be passed to compile
var helloWorldTemplate = $.telligent.evolution.template.compile('<p>Hello <%: name %></p>');
The compiled template can then be efficiently used (and re-used) by passing data to template. The data must contain keys that match those contained in the template. In this case, the template can refer to a variable named 'name'.
var renderedHello = helloWorldTemplate({
name: 'Rob'
});
Arrays can be passed as well. In this case, a template's foreach could iterate over 'users'.
var renderedUserList = user({
users: [
{ displayName: 'Name1', profileUrl: 'url1' },
{ displayName: 'Name2', profileUrl: 'url3' },
{ displayName: 'Name3', profileUrl: 'url3' }
]
});
Customizing template syntax
foreach is a platform-defined template helper. Custom helpers can also be defined by passing an object of functions during compilation.
var myTemplate = $.telligent.evolution.template.compile('myTemplate', {
pluralize: function(raw) {
// naive pluralization demonstration
return raw + 's';
}
});
Then the helper can be used within the template
<script type="text/html" id="myTemplate">
<ul>
<% foreach(vehicles, function(vehicle) { %>
<li>type: <%= pluralize(vehicle.type) %><%>
<% }); %>
</ul>
</script>
Methods
compile
Transforms a template string into an efficient JavaScript function which can process data into a rendered string.
$.telligent.evolution.template.compile(template, extraHelpers, delimiters)
template: Either a raw JavaScript template string, or an ID of a<script type="text/html">element containing an embedded template.extraHelpers: Optional functions made available for use within the template-
delimiters: Optional object containing overrides for re-defining what delimiter formats are used. Override object must contain bothopenandclosedelimiter keys and values.-
default:
open:'<%'close:'%>'
-
default: