src/cm/media/js/lib/yui/yui_3.10.3/docs/handlebars/index.html
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
<!DOCTYPE html>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
<html lang="en">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
<head>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
    <meta charset="utf-8">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
    <title>Handlebars</title>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=PT+Sans:400,700,400italic,700italic">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
    <link rel="stylesheet" href="../../build/cssgrids/cssgrids-min.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
    <link rel="stylesheet" href="../assets/css/main.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
    <link rel="stylesheet" href="../assets/vendor/prettify/prettify-min.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
    <link rel="shortcut icon" type="image/png" href="../assets/favicon.png">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
    <script src="../../build/yui/yui-min.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
</head>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
<body>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
<!--
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
<a href="https://github.com/yui/yui3"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub"></a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
-->
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
<div id="doc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
    <div id="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
        <h1><img src="http://yuilibrary.com/img/yui-logo.png"></h1>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
        <a href="#toc" class="jump">Jump to Table of Contents</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
            <h1>Handlebars</h1>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
    <div class="yui3-g">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
        <div class="yui3-u-3-4">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
            <div id="main">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
                <div class="content"><style scoped>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
.handlebars-code pre.code {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
    height: 100%;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
    margin: 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
.handlebars-code td,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
.handlebars-code th {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
    background: #fff;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
    padding: 0 0 0 12px;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
.handlebars-code td:first-child,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
.handlebars-code th:first-child { padding-left: 0; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
</style>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
<div class="intro">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
Handlebars is a simple template language inspired by <a href="http://mustache.github.com/">Mustache</a>. This component is a YUI port of the <a href="https://github.com/wycats/handlebars.js">original Handlebars project</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
This guide covers the YUI port of Handlebars, which differs from the original Handlebars in only <a href="#differences-from-original-handlebars">a few minor ways</a> and is kept closely in sync with the original. The official Handlebars documentation can be found at <a href="http://handlebarsjs.com/">handlebarsjs.com</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
<h2 id="getting-started">Getting Started</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
To include the source files for Handlebars and its dependencies, first load
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
the YUI seed file if you haven't already loaded it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
<pre class="code prettyprint">&lt;script src=&quot;http:&#x2F;&#x2F;yui.yahooapis.com&#x2F;3.10.3&#x2F;build&#x2F;yui&#x2F;yui-min.js&quot;&gt;&lt;&#x2F;script&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
Next, create a new YUI instance for your application and populate it with the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
modules you need by specifying them as arguments to the <code>YUI().use()</code> method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
YUI will automatically load any dependencies required by the modules you
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
specify.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
<pre class="code prettyprint">&lt;script&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
&#x2F;&#x2F; Create a new YUI instance and populate it with the required modules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
YUI().use(&#x27;handlebars&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
    &#x2F;&#x2F; Handlebars is available and ready for use. Add implementation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
    &#x2F;&#x2F; code here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
&lt;&#x2F;script&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
For more information on creating YUI instances and on the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
<a href="http://yuilibrary.com/yui/docs/api/classes/YUI.html#method_use"><code>use()</code> method</a>, see the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
documentation for the <a href="../yui/index.html">YUI Global Object</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
<h2 id="using-handlebars">Using Handlebars</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
<h3 id="quick-start">Quick Start</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
A Handlebars template is just some text that contains Handlebars <a href="#basic-expressions">expressions</a> like <code>{{foo}}</code>. Although most people use Handlebars to generate HTML, it can easily generate JSON, XML, YAML, or any other plain text format.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
When you render a template, Handlebars evaluates expressions and replaces them with data. <a href="#block-expressions">Block expressions</a> can be used for iteration, simple if/else branching, and executing <a href="#helper-functions">helper functions</a>, but otherwise Handlebars is completely logic-less. This makes it ideal for separating content from functionality.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
First, you need to define a template string somewhere. Most template strings are long and contain lots of newlines and indentation, which makes them hard to read and maintain if you store them directly in JavaScript. A common pattern in apps that use Handlebars is to use <strong>micro-templating</strong>, which means embedding template strings in a static HTML document, wrapped in a <code>&lt;script&gt;</code> element with the attribute <code>type=&quot;text&#x2F;x-handlebars-template&quot;</code>. Thanks to the <code>type</code> attribute, the browser won't try to execute the script, and you can fetch the template string whenever you need it using <code>Y.one()</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
Here's a simple micro-template that creates a list of links:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
<pre class="code prettyprint lang-handlebars">&lt;script id=&quot;list-template&quot; type=&quot;text&#x2F;x-handlebars-template&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
    &lt;p&gt;YUI is brought to you by:&lt;&#x2F;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
    &lt;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
        {{#items}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
            &lt;li&gt;&lt;a href=&quot;{{url}}&quot;&gt;{{name}}&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
        {{&#x2F;items}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
    &lt;&#x2F;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
&lt;&#x2F;script&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
Once you have a template string, the next step is to <strong>compile</strong> that string into a Handlebars template function. You can then <strong>render</strong> the template by passing a data object (also known as a <a href="#contexts-paths">context</a>) into that function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
<pre class="code prettyprint">&lt;script&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
YUI().use(&#x27;handlebars&#x27;, &#x27;node-base&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
    &#x2F;&#x2F; Extract the template string and compile it into a reusable function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
    var source   = Y.one(&#x27;#list-template&#x27;).getHTML(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
        template = Y.Handlebars.compile(source),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
        html;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
    &#x2F;&#x2F; Render the template to HTML using the specified data.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
    html = template({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
        items: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
            {name: &#x27;pie&#x27;, url: &#x27;http:&#x2F;&#x2F;pieisgood.org&#x2F;&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
            {name: &#x27;mountain dew&#x27;, url: &#x27;http:&#x2F;&#x2F;www.mountaindew.com&#x2F;&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
            {name: &#x27;kittens&#x27;, url: &#x27;http:&#x2F;&#x2F;www.flickr.com&#x2F;search&#x2F;?q=kittens&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
            {name: &#x27;rainbows&#x27;, url: &#x27;http:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=OQSNhk5ICTI&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
        ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
    &#x2F;&#x2F; Append the rendered template to the page.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
    Y.one(&#x27;body&#x27;).append(html);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
&lt;&#x2F;script&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
After it's rendered and appended to the page, the output looks like this:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
<div class="example">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
    <p>YUI is brought to you by:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
    <ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
        <li><a href="http://pieisgood.org/">pie</a></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
        <li><a href="http://www.mountaindew.com/">mountain dew</a></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
        <li><a href="http://www.flickr.com/search/?q=kittens">kittens</a></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
        <li><a href="http://www.youtube.com/watch?v=OQSNhk5ICTI">rainbows</a></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
    </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
You can re-render the template at any time simply by executing the stored <code>template</code> function again and passing in new data. Templates only need to be parsed once, which makes rendering a template multiple times very fast.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
<pre class="code prettyprint">&#x2F;&#x2F; Re-render the template with new data. No need to parse the template again.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
var html = template({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
    items: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
        {name: &#x27;caffeine&#x27;, url: &#x27;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Caffeine&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
        {name: &#x27;git&#x27;, url: &#x27;http:&#x2F;&#x2F;git-scm.com&#x2F;&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
        {name: &#x27;numberwang&#x27;, url: &#x27;http:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=qjOZtWZ56lc&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
    ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
Alternatively, if you only need to render something once, you can use the convenient <a href="http://yuilibrary.com/yui/docs/api/classes/Handlebars.html#method_render"><code>render()</code></a> method to parse and render a template in a single step.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
<pre class="code prettyprint">&#x2F;&#x2F; Parse and render a template in a single step.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
var html = Y.Handlebars.render(source, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
    &#x2F;&#x2F; ... data ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
<h3 id="template-syntax">Template Syntax</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
<h4 id="basic-expressions">Basic Expressions</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
A basic Handlebars expression starts with <code>{{</code>, contains some text, and ends with <code>}}</code>. These delimiters are often referred to as "mustaches", since they look a little bit like fancy mustaches if you turn your head sideways, squint a bit, and use your imagination. When a template is rendered, Handlebars will replace expressions with rendered data.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
A simple Handlebars expression looks like this:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
<pre class="code prettyprint lang-handlebars">&lt;h1&gt;{{title}}&lt;&#x2F;h1&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
This tells Handlebars:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
<ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
    <li><p>If there's a <a href="#helper-functions">helper function</a> named "title", execute it and insert its return value here.</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
    <li><p>Otherwise, if there exists a <code>title</code> property in the current <a href="#contexts-paths">context</a>, and that property is not falsy or an empty array, insert its value here.</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
    <li><p>Otherwise, insert an empty string.</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
</ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
<h5 id="html-escaping">HTML Escaping</h5>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
By default, content rendered using a double-mustache expression like <code>{{foo}}</code> will automatically be HTML-escaped for safety. To render unescaped HTML output, use a triple-mustache expression like <code>{{{foo}}}</code>. Only use a triple-mustache expression for content you trust! Never use it to render unfiltered user input.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
Handlebars also supports an alternative <code>{{&amp;foo}}</code> syntax to render unescaped content, but this syntax is less commonly used. That said, some people find it preferable to the triple-mustache syntax since it's easier to spot at a glance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
<h5 id="contexts-paths">Contexts &amp; Paths</h5>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
All expressions are evaluated relative to the current <strong>context</strong>. The default context for a template is the data object passed in when the template is rendered.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
Here's the default context used for the examples in the rest of this section:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
<pre class="code prettyprint">{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
    site: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
        title: &#x27;AwesomeBlog&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
        url: &#x27;http:&#x2F;&#x2F;blog.example.com&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
    article: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
        id: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
        title: &#x27;My blog is awesome&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
You can change the context using a <a href="#block-expressions">block expression</a>. Inside the block, the context will be set to the value referenced in the block's opening tag.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
<pre class="code prettyprint lang-handlebars">&lt;div class=&quot;header&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
    {{#site}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
        &lt;h1&gt;&lt;a href=&quot;{{url}}&quot;&gt;{{title}}&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
    {{&#x2F;site}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
&lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
&lt;div class=&quot;content&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
    {{#article}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
        &lt;h2&gt;{{title}}&lt;&#x2F;h2&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
    {{&#x2F;article}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
&lt;&#x2F;div&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
Certain <a href="#built-in-block-helpers">block helpers</a> also change the context within the block. For example, when iterating over an array of items using <code>{{#each items}} ... {{&#x2F;each}}</code> or <code>{{#items}} ... {{&#x2F;items}}</code>, the context inside the block will be set to the current item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
The special expression <code>{{.}}</code> always evaluates to the current context, sort of like <code>this</code> in JavaScript. In fact, <code>{{.}}</code> and <code>{{this}}</code> do exactly the same thing! This is especially useful when <a href="#each">iterating over an array of strings</a>, since it allows you to output each string value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
Using blocks to change the context is optional. Expressions can reference deeply-nested properties using dot notation:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
<pre class="code prettyprint lang-handlebars">&lt;div class=&quot;content&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
    &lt;h2&gt;{{article.title}}&lt;&#x2F;h2&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
&lt;&#x2F;div&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
The special expression <code>..&#x2F;</code> references the current context's parent scope.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
<pre class="code prettyprint lang-handlebars">&lt;div class=&quot;content&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
    {{#article}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
        &lt;h2&gt;&lt;a href=&quot;{{..&#x2F;site.url}}&#x2F;article&#x2F;{{id}}&quot;&gt;{{title}}&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
    {{&#x2F;article}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
&lt;&#x2F;div&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
Note that <code>..&#x2F;</code> references the parent scope, but not necessarily the previous level in the context hierarchy. Block helpers can invoke a block with any context, so a purely hierarchical reference wouldn't make much sense.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
<h4 id="block-expressions">Block Expressions</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
Block expressions are used to change the current <a href="#contexts-paths">context</a> or to pass a block of content to a <a href="#helper-functions">helper function</a>. A block expression starts with an opening tag prefixed by <code>#</code>, contains some content, and ends with a closing tag prefixed by <code>&#x2F;</code>, similar to an HTML element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
The following example uses the <a href="#each">built-in <code>each</code> helper</a> to iterate over an array named <code>gadgets</code> and render the block's content in the context of each item in the array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
<table class="handlebars-code">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
    <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
            <th>Template Source</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
            <th>Data</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
            <th>Output</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
    </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
    <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
<pre class="code prettyprint lang-handlebars">&lt;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
{{#each gadgets}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
    &lt;li&gt;{{name}}&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
{{&#x2F;each}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
&lt;&#x2F;ul&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
<pre class="code prettyprint">{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
    gadgets: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
        {name: &#x27;iPhone&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
        {name: &#x27;Android&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
        {name: &#x27;Windows Phone&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
    ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
<pre class="code prettyprint">&lt;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
    &lt;li&gt;iPhone&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
    &lt;li&gt;Android&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
    &lt;li&gt;Windows Phone&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
&lt;&#x2F;ul&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
    </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
The <code>each</code> helper is so useful that Handlebars will actually use it as the default helper if you create a block expression with an identifier that points to an array value. So we could also write the template above like this and get the same result:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
<pre class="code prettyprint lang-handlebars">&lt;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
{{#gadgets}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
    &lt;li&gt;{{name}}&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
{{&#x2F;gadgets}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
&lt;&#x2F;ul&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
If a block expression refers to an empty array, a falsy value, or a value that doesn't exist in the current context, the block's contents won't be rendered.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
A block expression that refers to a non-array value such as an object or string will change the context to that value inside the block. See <a href="#contexts-paths">Contexts & Paths</a> for an example of this.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
<h4 id="built-in-block-helpers">Built-in Block Helpers</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
Handlebars provides several built-in block helpers that are always available to templates.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
<h5 id="each">each</h5>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
The <code>each</code> helper iterates over an array. The block will be rendered once for each item, and its context will be set to the current item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
<table class="handlebars-code">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
    <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
            <th>Template Source</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
            <th>Data</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
            <th>Output</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
    </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
    <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
<pre class="code prettyprint lang-handlebars">&lt;h1&gt;Bands Ryan likes&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
&lt;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
{{#each bands}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
    &lt;li&gt;{{.}}&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
{{&#x2F;each}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
&lt;&#x2F;ul&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
<pre class="code prettyprint">{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
    bands: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
        &#x27;The Dandy Warhols&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
        &#x27;The Brian Jonestown Massacre&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
        &#x27;The Black Keys&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
        &#x27;Black Rebel Motorcycle Club&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
    ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
<pre class="code prettyprint">&lt;h1&gt;Bands Ryan likes&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
&lt;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
    &lt;li&gt;The Dandy Warhols&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
    &lt;li&gt;The Brian Jonestown Massacre&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
    &lt;li&gt;The Black Keys&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
    &lt;li&gt;Black Rebel Motorcycle Club&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
&lt;&#x2F;ul&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
    </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
If you create a block expression with an identifier that points to an array value, Handlebars will automatically use the <code>each</code> helper to iterate over that array, so we could rewrite the template above like this and get the same result:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
<pre class="code prettyprint lang-handlebars">&lt;h1&gt;Bands Ryan likes&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
&lt;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
{{#bands}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
    &lt;li&gt;{{.}}&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
{{&#x2F;bands}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
&lt;&#x2F;ul&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
<h5 id="with">with</h5>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
The <code>with</code> block helper renders the given block in a different context. This can save you some typing in a template that will render a lot of namespaced data.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
<table class="handlebars-code">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
    <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
            <th>Template Source</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
            <th>Data</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
            <th>Output</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
    </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
    <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
<pre class="code prettyprint lang-handlebars">&lt;p class=&quot;author&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
{{#with author}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
    {{firstName}} {{lastName}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
{{&#x2F;with}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
&lt;&#x2F;p&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
<pre class="code prettyprint">{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
    author: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
        firstName: &#x27;Ryan&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
        lastName: &#x27;Grove&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
<pre class="code prettyprint">&lt;p class=&quot;author&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
    Ryan Grove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
&lt;&#x2F;p&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
    </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
If you create an expression with an identifier that points to an object value, Handlebars will automatically use the <code>with</code> helper to render the block in the context of that object, so we could rewrite the template above like this and get the same result:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
<pre class="code prettyprint lang-handlebars">&lt;p class=&quot;author&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
{{#author}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
    {{firstName}} {{lastName}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
{{&#x2F;author}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
&lt;&#x2F;p&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
<h5 id="if">if</h5>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
The <code>if</code> block helper accepts a single parameter, which may be either a literal value or a reference to a value. If the value is truthy and not an empty array, the contents of the block will be rendered. If an optional <code>else</code> block is provided, its contents will be rendered if the value is falsy or an empty array. Inside an <code>if</code> or <code>else</code> block, the context remains the same as it was outside the block.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
In order to prevent templates from becoming bogged down with logic that should be implemented in JavaScript or in a helper function, the <code>if</code> helper only supports simple true/false logic based on a single value. It doesn't support comparisons or logical operators like <code>&amp;&amp;</code> and <code>||</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
<table class="handlebars-code">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
    <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
            <th>Template Source</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
            <th>Data</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
            <th>Output</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
    </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
    <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
<pre class="code prettyprint lang-handlebars">&lt;h1&gt;Currently online&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
{{#if users}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
    &lt;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
    {{#users}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
        &lt;li&gt;{{.}}&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
    {{&#x2F;users}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
    &lt;&#x2F;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
{{&#x2F;if}}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
<pre class="code prettyprint">{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
    users: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
        &#x27;Ryan Grove&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
        &#x27;Eric Ferraiuolo&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
        &#x27;Lucas Smith&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
        &#x27;Dav Glass&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
    ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
<pre class="code prettyprint">&lt;h1&gt;Currently online&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
&lt;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
    &lt;li&gt;Ryan Grove&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
    &lt;li&gt;Eric Ferraiuolo&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
    &lt;li&gt;Lucas Smith&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
    &lt;li&gt;Dav Glass&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
&lt;&#x2F;ul&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
    </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
If we empty the <code>users</code> array and re-render the template, the list won't be included in the output.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
<table class="handlebars-code">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
    <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
            <th>Template Source</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
            <th>Data</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
            <th>Output</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
    </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
    <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   572
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
<pre class="code prettyprint lang-handlebars">&lt;h1&gt;Currently online&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
{{#if users}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
    &lt;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
    {{#users}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
        &lt;li&gt;{{.}}&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
    {{&#x2F;users}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
    &lt;&#x2F;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
{{&#x2F;if}}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
<pre class="code prettyprint">{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
    users: []
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
<pre class="code prettyprint">&lt;h1&gt;Currently online&lt;&#x2F;h1&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
    </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
We can add an <code>else</code> block to display an informative message when no users are online.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
<table class="handlebars-code">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
    <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
            <th>Template Source</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   609
            <th>Data</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
            <th>Output</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
    </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
    <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
<pre class="code prettyprint lang-handlebars">&lt;h1&gt;Currently online&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
{{#if users}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
    &lt;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
    {{#users}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
        &lt;li&gt;{{.}}&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
    {{&#x2F;users}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
    &lt;&#x2F;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
{{else}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
    &lt;p&gt;Nobody&#x27;s here!&lt;&#x2F;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
{{&#x2F;if}}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
<pre class="code prettyprint">{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
    users: []
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
<pre class="code prettyprint">&lt;h1&gt;Currently online&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
&lt;p&gt;Nobody&#x27;s here!&lt;&#x2F;p&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
    </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
<h5 id="unless">unless</h5>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   650
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   651
The <code>unless</code> block helper does exactly the opposite of the <code>if</code> helper: it renders the contents of the block if the provided value is falsy or an empty array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
<table class="handlebars-code">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
    <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
            <th>Template Source</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
            <th>Data</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
            <th>Output</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
    </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
    <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
<pre class="code prettyprint lang-handlebars">&lt;h1&gt;Currently online&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
{{#unless users}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
    &lt;p&gt;Nobody&#x27;s here!&lt;&#x2F;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
{{else}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
    &lt;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
    {{#users}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
        &lt;li&gt;{{.}}&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
    {{&#x2F;users}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
    &lt;&#x2F;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
{{&#x2F;unless}}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
<pre class="code prettyprint">{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
    users: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
        &#x27;Ryan Grove&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
        &#x27;Eric Ferraiuolo&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
        &#x27;Lucas Smith&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
        &#x27;Dav Glass&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
    ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
<pre class="code prettyprint">&lt;h1&gt;Currently online&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
&lt;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   696
    &lt;li&gt;Ryan Grove&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
    &lt;li&gt;Eric Ferraiuolo&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
    &lt;li&gt;Lucas Smith&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
    &lt;li&gt;Dav Glass&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
&lt;&#x2F;ul&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
    </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
<h4 id="comment-expressions">Comment Expressions</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
An expression beginning with <code>{{!</code> is treated as a comment and won't show up in the rendered output.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
<pre class="code prettyprint lang-handlebars">{{! I&#x27;m a Handlebars comment! I won&#x27;t show up in rendered output. }}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
&lt;!-- I&#x27;m an HTML comment! I will show up in rendered output. --&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   718
Multi-line comments work too.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
<pre class="code prettyprint lang-handlebars">{{!
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   722
    I&#x27;m a multi-line comment!
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   723
}}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   724
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   725
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   726
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   727
Unfortunately, Handlebars doesn't ignore expressions inside comments, so you can't actually comment out an expression.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   728
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   729
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   730
<pre class="code prettyprint lang-handlebars">&lt;!-- This won&#x27;t work (it&#x27;ll leave a trailing &quot;}}&quot; behind) --&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   731
{{! {{expression}} }}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   732
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   733
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   734
<h4 id="partial-expressions">Partial Expressions</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   735
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   736
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   737
An expression like <code>{{&gt; partialName}}</code> will render the named partial template at that position in the output, inheriting the current data context. A partial is a reusable template that's registered using the <a href="http://yuilibrary.com/yui/docs/api/classes/Handlebars.html#method_registerPartial"><code>registerPartial()</code></a> method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   738
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   739
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   740
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   741
See the <a href="#partials">Partials</a> section of this guide for more details on creating and using partials.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   742
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   743
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   744
<h3 id="helper-functions">Helper Functions</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   745
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   746
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   747
Helper functions (often referred to simply as "helpers") are functions that are registered with the Handlebars runtime using the <a href="http://yuilibrary.com/yui/docs/api/classes/Handlebars.html#method_registerHelper"><code>registerHelper()</code></a> method and can then be called from within a template at render-time. Helper functions can transform text, iterate over arbitrary data, implement branching logic, and more.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   748
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   749
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   750
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   751
A helper function can accept parameters and even entire blocks of template content. Here's how you might call a simple inline helper to render an HTML link, passing in the link text and URL:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   752
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   753
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   754
<pre class="code prettyprint lang-handlebars">{{link &quot;Handlebars docs&quot; &quot;http:&#x2F;&#x2F;handlebarsjs.com&quot;}}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   755
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   756
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   757
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   758
Block helpers have a slightly different syntax, using an opening and closing tag to delimit an entire block of template content. The helper name is specified in the opening and closing tags of the block:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   759
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   760
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   761
<pre class="code prettyprint lang-handlebars">{{#list contents}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   762
    {{link text url}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   763
{{&#x2F;list}}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   764
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   765
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   766
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   767
Many of Handlebars' own features are implemented as <a href="#built-in-block-helpers">Built-in Block Helpers</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   768
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   769
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   770
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   771
Helper functions are executed when a template is rendered, not when it's compiled. This allows helper functions to take advantage of the state of the rendering environment (since a template may have been pre-compiled somewhere else), and to return different content even when the same template is rendered multiple times.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   772
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   773
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   774
<h4 id="defining-custom-helpers">Defining Custom Helpers</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   775
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   776
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   777
To define a custom helper function, call the <a href="http://yuilibrary.com/yui/docs/api/classes/Handlebars.html#method_registerHelper"><code>registerHelper()</code></a> method and provide a name and a function to execute when the helper is called. The function may accept any number of arguments from the template, which may be provided either as literal values or as references to data properties. The final argument passed to the function will always be an <code>options</code> object (more on this <a href="#hash-arguments">later</a>).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   778
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   779
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   780
<h5 id="basic-helpers">Basic Helpers</h5>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   781
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   782
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   783
Here's a simple helper that takes two parameters and spits out an HTML link.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   784
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   785
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   786
<pre class="code prettyprint">&#x2F;&#x2F; Register a {{{link}}} helper for creating HTML links.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   787
Y.Handlebars.registerHelper(&#x27;link&#x27;, function (text, url) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   788
    return &#x27;&lt;a href=&quot;&#x27; + url + &#x27;&quot;&gt;&#x27; + text + &#x27;&lt;&#x2F;a&gt;&#x27;;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   789
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   790
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   791
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   792
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   793
We can use this helper to render the following template:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   794
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   795
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   796
<p style="margin-bottom: -1em;">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   797
<strong>Template Source</strong>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   798
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   799
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   800
<pre class="code prettyprint lang-handlebars">&lt;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   801
    &lt;li&gt;{{{link &quot;Pie&quot; &quot;http:&#x2F;&#x2F;pieisgood.org&#x2F;&quot;}}}&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   802
    &lt;li&gt;{{{link kittens.text kittens.url}}}&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   803
&lt;&#x2F;ul&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   804
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   805
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   806
<p style="margin-bottom: -1em;">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   807
<strong>Data</strong>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   808
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   809
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   810
<pre class="code prettyprint">{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   811
    kittens: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   812
        text: &quot;Kittens&quot;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   813
        url : &quot;http:&#x2F;&#x2F;www.flickr.com&#x2F;search&#x2F;?q=kittens&quot;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   814
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   815
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   816
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   817
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   818
<p style="margin-bottom: -1em;">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   819
<strong>Output</strong>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   820
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   821
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   822
<pre class="code prettyprint">&lt;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   823
    &lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;pieisgood.org&#x2F;&quot;&gt;Pie&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   824
    &lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;www.flickr.com&#x2F;search&#x2F;?q=kittens&quot;&gt;Kittens&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   825
&lt;&#x2F;ul&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   826
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   827
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   828
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   829
Notice the use of the triple-mustache for the <code>{{{link}}}</code> expressions? That was necessary in order to prevent the helper's return value from being HTML-escaped. As an alternative to using a triple-mustache, we could modify the helper to return an instance of <code>Y.Handlebars.SafeString</code>, which will bypass HTML escaping even when used with a double-mustache expression.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   830
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   831
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   832
<pre class="code prettyprint">&#x2F;&#x2F; Register a {{link}} helper for creating HTML links. The return value of this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   833
&#x2F;&#x2F; helper will never be automatically HTML-escaped, so the helper does its own
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   834
&#x2F;&#x2F; internal escaping.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   835
Y.Handlebars.registerHelper(&#x27;link&#x27;, function (text, url) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   836
    text = Y.Escape.html(text);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   837
    url  = Y.Escape.html(url);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   838
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   839
    return new Y.Handlebars.SafeString(&#x27;&lt;a href=&quot;&#x27; + url + &#x27;&quot;&gt;&#x27; + text + &#x27;&lt;&#x2F;a&gt;&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   840
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   841
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   842
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   843
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   844
Now we can simply use <code>{{link &quot;Text&quot; &quot;http:&#x2F;&#x2F;example.com&#x2F;&quot;}}</code> to call the helper, and we don't need to worry about escaping in the template itself since we know the helper will take care of it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   845
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   846
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   847
<h5 id="hash-arguments">Hash Arguments</h5>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   848
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   849
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   850
In the example above, we created a helper that accepts two unnamed arguments. Unnamed arguments work fine for simple helpers, but you can also choose to supply a helper function with a hash of named parameters. This may be more intuitive if your helper accepts a lot of options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   851
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   852
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   853
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   854
The final argument passed to a helper function is always a special <code>options</code> object. The <code>options.hash</code> property is an object hash that contains any named parameters that were passed from the template.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   855
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   856
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   857
<pre class="code prettyprint">&#x2F;&#x2F; Register a {{link}} helper that accepts a hash of named parameters instead
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   858
&#x2F;&#x2F; of individual arguments.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   859
Y.Handlebars.registerHelper(&#x27;link&#x27;, function (options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   860
    var text = Y.Escape.html(options.hash.text),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   861
        url  = Y.Escape.html(options.hash.url);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   862
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   863
    return new Y.Handlebars.SafeString(&#x27;&lt;a href=&quot;&#x27; + url + &#x27;&quot;&gt;&#x27; + text + &#x27;&lt;&#x2F;a&gt;&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   864
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   865
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   866
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   867
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   868
In the template, pass hash arguments as key/value pairs delimited by <code>=</code> and separated by a space. Keys must be simple identifiers. Values may be literal values (strings, bools, integers) or references to data properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   869
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   870
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   871
<pre class="code prettyprint lang-handlebars">&lt;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   872
    &lt;li&gt;{{link text=&quot;Pie&quot; url=&quot;http:&#x2F;&#x2F;pieisgood.org&#x2F;&quot;}}&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   873
    &lt;li&gt;{{link text=kittens.text url=kittens.url}}&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   874
&lt;&#x2F;ul&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   875
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   876
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   877
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   878
A helper function can even accept a combination of standard arguments and hash arguments.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   879
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   880
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   881
<pre class="code prettyprint">&#x2F;&#x2F; Register a {{link}} helper that accepts a combination of standard args and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   882
&#x2F;&#x2F; hash arguments.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   883
Y.Handlebars.registerHelper(&#x27;link&#x27;, function (text, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   884
    var url = Y.Escape.html(options.hash.url);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   885
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   886
    text = Y.Escape.html(text);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   887
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   888
    return new Y.Handlebars.SafeString(&#x27;&lt;a href=&quot;&#x27; + url + &#x27;&quot;&gt;&#x27; + text + &#x27;&lt;&#x2F;a&gt;&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   889
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   890
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   891
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   892
<pre class="code prettyprint lang-handlebars">&lt;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   893
    &lt;li&gt;{{link &quot;Pie&quot; url=&quot;http:&#x2F;&#x2F;pieisgood.org&#x2F;&quot;}}&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   894
    &lt;li&gt;{{link kittens.text url=kittens.url}}&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   895
&lt;&#x2F;ul&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   896
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   897
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   898
<h5 id="block-helpers">Block Helpers</h5>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   899
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   900
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   901
A block helper works similarly to a basic helper, with a couple of differences:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   902
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   903
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   904
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   905
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   906
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   907
        The <code>options</code> object passed to a block helper function contains an <code>fn</code> property, which is a function that accepts a context as an argument and returns a string containing the rendered contents of the block.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   908
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   909
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   910
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   911
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   912
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   913
        The <code>options</code> object passed to a block helper function also contains an <code>inverse</code> property. This is a function that accepts a context just like the <code>fn</code> property, except that it renders the block following an <code>else</code> statement. If there isn't an <code>else</code> statement, the <code>inverse</code> function will be a noop.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   914
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   915
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   916
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   917
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   918
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   919
        The return value of a block helper is not automatically HTML-escaped, but the return value of <code>options.fn()</code> <em>is</em> automatically escaped. This ensures that block helpers don't return double-escaped content.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   920
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   921
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   922
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   923
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   924
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   925
Here's a simple block helper that wraps its contents in a <code>&lt;p&gt;</code> element:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   926
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   927
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   928
<pre class="code prettyprint">Y.Handlebars.registerHelper(&#x27;gamera&#x27;, function (options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   929
    return &#x27;&lt;p class=&quot;&#x27; + this.animal + &#x27;&quot;&gt;&#x27; + options.fn(this) + &#x27;&lt;&#x2F;p&gt;&#x27;;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   930
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   931
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   932
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   933
<table class="handlebars-code">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   934
    <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   935
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   936
            <th>Template Source</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   937
            <th>Data</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   938
            <th>Output</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   939
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   940
    </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   941
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   942
    <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   943
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   944
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   945
<pre class="code prettyprint lang-handlebars">&lt;p&gt;Gamera is really neat!&lt;&#x2F;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   946
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   947
{{#gamera}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   948
    He is made of {{animal}} meat!
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   949
{{&#x2F;gamera}}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   950
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   951
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   952
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   953
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   954
<pre class="code prettyprint">{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   955
    animal: &#x27;turtle&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   956
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   957
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   958
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   959
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   960
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   961
<pre class="code prettyprint">&lt;p&gt;Gamera is a really neat!&lt;&#x2F;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   962
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   963
&lt;p class=&quot;turtle&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   964
    He is made of turtle meat!
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   965
&lt;&#x2F;p&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   966
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   967
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   968
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   969
    </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   970
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   971
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   972
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   973
Here's how Handlebars implements its own <a href="#if"><code>if</code></a> block helper. The <code>options.inverse()</code> function makes it possible to render the contents of an <code>else</code> block if one is provided.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   974
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   975
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   976
<pre class="code prettyprint">Y.Handlebars.registerHelper(&#x27;if&#x27;, function (condition, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   977
    if (condition) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   978
        return options.fn(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   979
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   980
        return options.inverse(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   981
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   982
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   983
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   984
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   985
<h3 id="partials">Partials</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   986
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   987
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   988
A partial is like a mini-template that can be called from a larger template. Partials are often used to render frequently-used chunks of content, such as a header, footer, or a common view of some data.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   989
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   990
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   991
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   992
Partials are registered with Handlebars through the <a href="http://yuilibrary.com/yui/docs/api/classes/Handlebars.html#method_registerPartial"><code>registerPartial()</code></a> method. Once registered, a partial can be referenced from a template using an expression like <code>{{&gt; partialName }}</code>. Partials may be registered as string templates or as compiled template functions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   993
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   994
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   995
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   996
A partial will inherit the current context of the position at which it's included.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   997
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   998
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   999
<pre class="code prettyprint">&#x2F;&#x2F; Register a couple of reusable partials.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1000
Y.Handlebars.registerPartial(&#x27;header&#x27;, &#x27;&lt;h1&gt;{{title}}&lt;&#x2F;h1&gt;&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1001
Y.Handlebars.registerPartial(&#x27;footer&#x27;, &#x27;&lt;p&gt;Copyright (c) 2012 by Me.&lt;&#x2F;p&gt;&#x27;);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1002
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1003
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1004
<table class="handlebars-code">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1005
    <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1006
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1007
            <th>Template Source</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1008
            <th>Data</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1009
            <th>Output</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1010
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1011
    </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1012
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1013
    <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1014
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1015
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1016
<pre class="code prettyprint lang-handlebars">&lt;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1017
  {{&gt; header}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1018
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1019
  &lt;p&gt;Mustaches are awesome!&lt;&#x2F;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1020
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1021
  {{&gt; footer}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1022
&lt;&#x2F;div&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1023
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1024
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1025
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1026
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1027
<pre class="code prettyprint">{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1028
  title: &#x27;My Page About Mustaches&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1029
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1030
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1031
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1032
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1033
            <td width="33%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1034
<pre class="code prettyprint">&lt;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1035
  &lt;h1&gt;My Page About Mustaches&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1036
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1037
  &lt;p&gt;Mustaches are awesome!&lt;&#x2F;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1038
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1039
  &lt;p&gt;Copyright (c) 2012 by Me.&lt;&#x2F;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1040
&lt;&#x2F;div&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1041
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1042
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1043
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1044
    </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1045
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1046
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1047
<h3 id="compiling-and-rendering-templates">Compiling and Rendering Templates</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1048
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1049
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1050
Handlebars templates must be compiled before they can be rendered. One benefit of this is that a template only needs to be compiled once, and it can then be rendered multiple times without being recompiled. Templates can even be <a href="#precompiling-templates">precompiled</a> on the server or on the command line and then rendered on the client for optimal performance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1051
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1052
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1053
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1054
To compile a template string, pass it to the <a href="http://yuilibrary.com/yui/docs/api/classes/Handlebars.html#method_compile"><code>Y.Handlebars.compile()</code></a> method. You'll get back a function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1055
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1056
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1057
<pre class="code prettyprint">&#x2F;&#x2F; Compile a template into a reusable function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1058
var template = Y.Handlebars.compile(&#x27;My favorite food is {{food}}.&#x27;);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1059
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1060
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1061
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1062
When you're ready to render the template, execute the function and pass in some data. You'll get back a rendered string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1063
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1064
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1065
<pre class="code prettyprint">&#x2F;&#x2F; Render a previously compiled template.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1066
var output = template({food: &#x27;pie&#x27;});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1067
&#x2F;&#x2F; =&gt; &quot;My favorite food is pie.&quot;;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1068
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1069
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1070
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1071
You can re-render the template at any time just by calling the function again. You can even pass in completely different data.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1072
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1073
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1074
<pre class="code prettyprint">&#x2F;&#x2F; Re-render a previously compiled template.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1075
output = template({food: &#x27;cheesecake&#x27;});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1076
&#x2F;&#x2F; =&gt; &quot;My favorite food is cheesecake.&quot;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1077
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1078
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1079
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1080
If you don't plan to use a template more than once, you can compile and render it in a single step with <a href="http://yuilibrary.com/yui/docs/api/classes/Handlebars.html#method_render"><code>Y.Handlebars.render()</code></a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1081
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1082
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1083
<pre class="code prettyprint">&#x2F;&#x2F; Compile and render a template in a single step.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1084
output = Y.Handlebars.render(&#x27;My favorite food is {{food}}.&#x27;, {food: &#x27;pie&#x27;});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1085
&#x2F;&#x2F; =&gt; &quot;My favorite food is pie.&quot;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1086
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1087
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1088
<h3 id="precompiling-templates">Precompiling Templates</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1089
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1090
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1091
Since Handlebars templates can be compiled and rendered in separate steps, it's possible to precompile a template for use later. You can precompile a template into raw JavaScript on the server or even on the command line, serve this precompiled JavaScript template to the client, and then render it on the client using any data the client has at its disposal.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1092
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1093
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1094
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1095
The main benefit of precompilation is performance. Not only does the client not need to go through the compile step, you don't even have to load the Handlebars compiler on the client! All the client needs in order to render a precompiled template is a very small (about 1KB minified and gzipped) piece of JavaScript provided by the <code>handlebars-base</code> module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1096
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1097
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1098
<h5 id="on-the-server">On the Server</h5>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1099
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1100
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1101
To precompile Handlebars templates on the server using <a href="http://nodejs.org/">Node.js</a>, first install the YUI <a href="http://npmjs.org/">npm</a> module by running the following in a terminal from the directory that contains your server application (this assumes you already have Node and npm installed):
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1102
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1103
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1104
<pre class="code terminal"><span class="noselect">$ </span>npm install yui</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1105
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1106
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1107
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1108
This will install the <code>yui</code> npm module in the current directory and make it available to your application.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1109
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1110
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1111
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1112
Next, in your application code, call the <a href="http://yuilibrary.com/yui/docs/api/classes/Handlebars.html#method_precompile"><code>precompile()</code></a> method to precompile a Handlebars template. It will return a string containing JavaScript code.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1113
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1114
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1115
<pre class="code prettyprint">&#x2F;&#x2F; Load the YUI Handlebars module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1116
var Handlebars = require(&#x27;yui&#x2F;handlebars&#x27;).Handlebars;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1117
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1118
&#x2F;&#x2F; Precompile a template string (pass any string you like here).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1119
var precompiled = Handlebars.precompile(&#x27;My favorite food is {{food}}.&#x27;);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1120
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1121
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1122
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1123
The <code>precompiled</code> variable will contain a string of JavaScript code that looks something like this:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1124
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1125
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1126
<pre class="code prettyprint">function (Handlebars,depth0,helpers,partials,data) {\n  helpers = helpers || Handlebars.helpers; data = data || {};\n  var buffer = &quot;&quot;, stack1, foundHelper, functionType=&quot;function&quot;, escapeExpression=this.escapeExpression;\n\n\n  buffer += &quot;My favorite food is &quot;;\n  foundHelper = helpers.food;\n  if (foundHelper) { stack1 = foundHelper.call(depth0, {hash:{},data:data}); }\n  else { stack1 = depth0.food; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }\n  buffer += escapeExpression(stack1) + &quot;.&quot;;\n  return buffer;}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1127
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1128
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1129
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1130
The <code>precompile()</code> method differs from the <code>compile()</code> method in a couple of important ways:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1131
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1132
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1133
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1134
<li><p>The <code>precompile()</code> method returns a string of JavaScript code that's meant to be parsed and executed later, whereas <code>compile()</code> returns a live JavaScript function.</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1135
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1136
<li><p>The code returned by the <code>precompile()</code> method contains no references to any outside objects. Once it's evaluated, the resulting precompiled function must be passed to the <a href="http://yuilibrary.com/yui/docs/api/classes/Handlebars.html#method_template"><code>Y.Handlebars.template()</code></a> method, which will "revive" it and make the functionality of the current page's Handlebars class available to it.</p></li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1137
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1138
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1139
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1140
You can now serve this precompiled JS to the client in whatever way makes the most sense for your application. On the client, load the <code>handlebars-base</code> YUI module and pass the precompiled template to the <a href="http://yuilibrary.com/yui/docs/api/classes/Handlebars.html#method_template"><code>Y.Handlebars.template()</code></a> method to convert it into a renderable template function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1141
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1142
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1143
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1144
Here's a simple <a href="http://expressjs.com/">Express</a> app that precompiles a template on the server and renders it on the client:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1145
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1146
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1147
<pre class="code prettyprint">#!&#x2F;usr&#x2F;bin&#x2F;env node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1148
var Handlebars  = require(&#x27;yui&#x2F;handlebars&#x27;).Handlebars,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1149
    app         = require(&#x27;express&#x27;).createServer(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1150
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1151
    precompiled = Handlebars.precompile(&#x27;My favorite food is {{food}}.&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1152
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1153
app.get(&#x27;&#x2F;&#x27;, function (req, res) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1154
    res.send(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1155
        &#x27;&lt;html&gt;&lt;body&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1156
            &#x27;&lt;script src=&quot;http:&#x2F;&#x2F;yui.yahooapis.com&#x2F;3.10.3&#x2F;build&#x2F;yui&#x2F;yui-min.js&quot;&gt;&lt;&#x2F;script&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1157
            &#x27;&lt;script&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1158
                &#x27;YUI().use(&quot;handlebars-base&quot;, &quot;node&quot;, function (Y) {&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1159
                    &#x27;var template = Y.Handlebars.template(&#x27; + precompiled + &#x27;);&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1160
                    &#x27;Y.one(&quot;body&quot;).append(template({food: &quot;pie&quot;}));&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1161
                &#x27;});&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1162
            &#x27;&lt;&#x2F;script&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1163
        &#x27;&lt;&#x2F;body&gt;&lt;&#x2F;html&gt;&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1164
    );
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1165
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1166
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1167
app.listen(7000);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1168
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1169
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1170
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1171
To see this simple server in action, save it to a file, install Express and YUI by running <code>npm i express yui</code>, then execute the file with Node.js and browse to <a href="http://localhost:7000/" target="_blank">http://localhost:7000/</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1172
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1173
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1174
<h5 id="on-the-command-line">On the Command Line</h5>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1175
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1176
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1177
The original Handlebars project provides a Node.js-based Handlebars command-line application that can be installed via npm and used to precompile Handlebars template files. Since the precompiled templates produced by the original Handlebars are compatible with YUI Handlebars, this is a great way to precompile your Handlebars templates manually or as part of a build process.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1178
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1179
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1180
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1181
First, you'll need to install <a href="http://nodejs.org/">Node.js</a> and <a href="http://npmjs.org/">npm</a> if you haven't already. See their respective websites for instructions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1182
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1183
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1184
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1185
Next, install the Handlebars npm module. Note that this program is maintained by the maintainers of the <a href="https://github.com/wycats/handlebars.js">original Handlebars project</a>, so there's a chance it could change or break compatibility with YUI Handlebars without notice.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1186
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1187
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1188
<pre class="code terminal"><span class="noselect">$ </span>npm install -g handlebars</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1189
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1190
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1191
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1192
Now you can run the <code>handlebars</code> executable to precompile a template into JavaScript code.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1193
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1194
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1195
<pre class="code terminal"><span class="noselect">$ </span>handlebars my-template.handlebars -f precompiled-template.js</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1196
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1197
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1198
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1199
This will compile a template to a JavaScript file which you can load on your page. You could render it like this:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1200
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1201
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1202
<pre class="code prettyprint">&lt;!DOCTYPE html&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1203
&lt;meta charset=&quot;utf-8&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1204
&lt;title&gt;My Favorite Food&lt;&#x2F;title&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1205
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1206
&lt;body&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1207
&lt;div id=&quot;content&quot;&gt;&lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1208
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1209
&lt;script src=&quot;http:&#x2F;&#x2F;yui.yahooapis.com&#x2F;3.10.3&#x2F;build&#x2F;yui&#x2F;yui-min.js&quot;&gt;&lt;&#x2F;script&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1210
&lt;script&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1211
YUI().use(&#x27;handlebars-base&#x27;, &#x27;get&#x27;, &#x27;node&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1212
    &#x2F;&#x2F; Create a global Handlebars variable that points to Y.Handlebars. This is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1213
    &#x2F;&#x2F; necessary for compatibility with precompiled templates generated by the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1214
    &#x2F;&#x2F; original Handlebars project.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1215
    window.Handlebars = Y.Handlebars;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1216
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1217
    &#x2F;&#x2F; Load the precompiled template JS onto the page.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1218
    Y.Get.js(&#x27;precompiled-template.js&#x27;, function (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1219
        if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1220
            Y.error(&#x27;Template failed to load: &#x27; + err);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1221
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1222
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1223
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1224
        &#x2F;&#x2F; Render the template and insert its output into the page.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1225
        var output = Y.Handlebars.templates[&#x27;my-template&#x27;]({food: &#x27;pie&#x27;});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1226
        Y.one(&#x27;#content&#x27;).append(output);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1227
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1228
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1229
&lt;&#x2F;script&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1230
&lt;&#x2F;body&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1231
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1232
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1233
<h2 id="differences-from-original-handlebars">Differences From Original Handlebars</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1234
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1235
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1236
The YUI Handlebars component is mostly just a YUI wrapper around the <a href="https://github.com/wycats/handlebars.js">original Handlebars code</a>. It's kept closely in sync with the latest code from the upstream Handlebars project, and our intent is to ensure that YUI Handlebars and original Handlebars can be used interchangeably to render the same templates. To see what upstream Handlebars version YUI uses, inspect <code>Y.Handlebars.VERSION</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1237
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1238
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1239
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1240
YUI Handlebars differs from the original Handlebars in the following minor ways:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1241
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1242
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1243
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1244
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1245
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1246
        YUI Handlebars is a first-class YUI module intended to be loaded via <code>YUI().use()</code> or as a dependency of a module created via <code>YUI.add()</code>. Like all YUI modules, it adds its API to the <code>Y</code> namespace, so the YUI Handlebars object is <code>Y.Handlebars</code> instead of the global <code>Handlebars</code> namespace used by the original Handlebars.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1247
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1248
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1249
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1250
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1251
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1252
        The <code>Y.Handlebars.log()</code> function and the <code>log</code> helper call <code>Y.log()</code> under the hood. The log implementation in original Handlebars is a noop that's meant to be overridden.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1253
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1254
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1255
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1256
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1257
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1258
        YUI Handlebars appends a "-yui" suffix to the <code>Y.Handlebars.VERSION</code> property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1259
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1260
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1261
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1262
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1263
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1264
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1265
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1266
        <div class="yui3-u-1-4">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1267
            <div class="sidebar">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1268
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1269
                    <div id="toc" class="sidebox">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1270
                        <div class="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1271
                            <h2 class="no-toc">Table of Contents</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1272
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1273
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1274
                        <div class="bd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1275
                            <ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1276
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1277
<a href="#getting-started">Getting Started</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1278
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1279
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1280
<a href="#using-handlebars">Using Handlebars</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1281
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1282
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1283
<a href="#quick-start">Quick Start</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1284
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1285
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1286
<a href="#template-syntax">Template Syntax</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1287
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1288
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1289
<a href="#basic-expressions">Basic Expressions</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1290
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1291
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1292
<a href="#html-escaping">HTML Escaping</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1293
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1294
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1295
<a href="#contexts-paths">Contexts &amp; Paths</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1296
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1297
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1298
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1299
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1300
<a href="#block-expressions">Block Expressions</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1301
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1302
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1303
<a href="#built-in-block-helpers">Built-in Block Helpers</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1304
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1305
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1306
<a href="#each">each</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1307
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1308
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1309
<a href="#with">with</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1310
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1311
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1312
<a href="#if">if</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1313
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1314
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1315
<a href="#unless">unless</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1316
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1317
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1318
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1319
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1320
<a href="#comment-expressions">Comment Expressions</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1321
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1322
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1323
<a href="#partial-expressions">Partial Expressions</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1324
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1325
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1326
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1327
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1328
<a href="#helper-functions">Helper Functions</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1329
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1330
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1331
<a href="#defining-custom-helpers">Defining Custom Helpers</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1332
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1333
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1334
<a href="#basic-helpers">Basic Helpers</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1335
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1336
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1337
<a href="#hash-arguments">Hash Arguments</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1338
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1339
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1340
<a href="#block-helpers">Block Helpers</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1341
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1342
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1343
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1344
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1345
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1346
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1347
<a href="#partials">Partials</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1348
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1349
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1350
<a href="#compiling-and-rendering-templates">Compiling and Rendering Templates</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1351
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1352
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1353
<a href="#precompiling-templates">Precompiling Templates</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1354
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1355
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1356
<a href="#on-the-server">On the Server</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1357
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1358
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1359
<a href="#on-the-command-line">On the Command Line</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1360
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1361
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1362
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1363
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1364
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1365
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1366
<a href="#differences-from-original-handlebars">Differences From Original Handlebars</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1367
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1368
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1369
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1370
                    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1371
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1372
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1373
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1374
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1375
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1376
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1377
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1378
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1379
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1380
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1381
<script src="../assets/vendor/prettify/prettify-min.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1382
<script>prettyPrint();</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1383
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1384
<script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1385
YUI.Env.Tests = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1386
    examples: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1387
    project: '../assets',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1388
    assets: '../assets/handlebars',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1389
    name: 'handlebars',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1390
    title: 'Handlebars',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1391
    newWindow: '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1392
    auto:  false 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1393
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1394
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1395
</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1396
<script src="../assets/yui/test-runner.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1397
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1398
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1399
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1400
</body>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1401
</html>