src/cm/media/js/lib/yui/yui_3.10.3/docs/template/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>Template</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>Template</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
.micro-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
.micro-code td,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
.micro-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
.micro-code td:first-child,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
.micro-code th:first-child {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
    padding-left: 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
</style>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
<div class="intro">
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
The Template component provides <code>Y.Template</code>, a generic template engine API, and <code>Y.Template.Micro</code>, a string-based micro-templating language similar to <a href="http://ruby-doc.org/stdlib-1.9.3/libdoc/erb/rdoc/ERB.html">ERB</a> and <a href="http://underscorejs.org/#template">Underscore</a> templates.
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
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
<h2 id="getting-started">Getting Started</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
To include the source files for Template and its dependencies, first load
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
the YUI seed file if you haven't already loaded it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
<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
    62
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
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
    66
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
    67
YUI will automatically load any dependencies required by the modules you
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
specify.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
<pre class="code prettyprint">&lt;script&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
&#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
    73
YUI().use(&#x27;template&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
    &#x2F;&#x2F; Template is available and ready for use. Add implementation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
    &#x2F;&#x2F; code here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
&lt;&#x2F;script&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
For more information on creating YUI instances and on the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
<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
    83
documentation for the <a href="../yui/index.html">YUI Global Object</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
<h2 id="using-template">Using <code>Template</code></h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
<h3 id="quick-start">Quick Start</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
A template engine takes a template&mdash;usually in the form of a string&mdash;and some data, and renders the data into the template to produce an HTML or text string. Using templates to keep markup and structure separate from content encourages reuse and can make code easier to read and maintain, and in many cases faster.
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
<code>Y.Template</code> provides a common API that can be used to compile and render templates with a variety of template engines. The two template engines included in YUI are <a href="../handlebars/index.html">Handlebars</a> and <a href="#using-templatemicro">Template.Micro</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
The quickest way to get started is using the <code>template</code> module which will load both the <code>template-base</code> and <code>template-micro</code> modules. The following example shows the most basic usage with the <code>Y.Template.Micro</code> engine (the default template engine):
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
<pre class="code prettyprint lang-javascript">YUI().use(&#x27;template&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
    var micro = new Y.Template(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
        html  = micro.render(&#x27;&lt;i&gt;&lt;%= this.message %&gt;&lt;&#x2F;i&gt;&#x27;, {message: &#x27;hello!&#x27;});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
    Y.log(html); &#x2F;&#x2F; =&gt; &quot;&lt;i&gt;hello!&lt;&#x2F;i&gt;&quot;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
In the above example, <code>micro</code> is an instance of a template engine backed by Template.Micro. The <code>Y.Template()</code> constructor provides an abstraction over the backing engine, giving the engine instances a uniform API.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
Handlebars templates can be used instead of Micro templates by using the <code>template-base</code> and <code>handlebars</code> modules. The following example shows how to generate the same output as the above example with the Handlebars engine:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
<pre class="code prettyprint lang-javascript">YUI().use(&#x27;template-base&#x27;, &#x27;handlebars&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
    var handlebars = new Y.Template(Y.Handlebars),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
        html       = handlebars.render(&#x27;&lt;i&gt;{{message}}&lt;&#x2F;i&gt;&#x27;, {message: &#x27;hello!&#x27;});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
    Y.log(html); &#x2F;&#x2F; =&gt; &quot;&lt;i&gt;hello!&lt;&#x2F;i&gt;&quot;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
<strong>Note:</strong> Both examples are using the engine's <strong><code>render()</code></strong> method to compile and render the template dynamically on the <strong>client</strong>, doing this with Micro templates is fine, but it should be <strong>avoided with Handlebars</strong> templates. It is recommended that Handlebars templates be <a href="../handlebars/index.html#precompiling-templates">precompiled</a>, enabling the client code to use the lighter and faster <code>handlebars-base</code> module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
<h3 id="generic-template-api">Generic Template API</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
<code>Y.Template</code> exists specifically to provide its API as a normalization layer on top of conceptually similar, but technically different template engines and syntaxes. This layer of abstraction allows components which work with templates to not be tied to a particular engine. Another huge benefit is allowing developers to override a component's default templates using an entirely different template engine.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
The two template engines provided in YUI, Handlebars and Template.Micro, are conceptually similar. They both compile string-based templates into functions, which are invoked with a data context and return the rendered output as a string. Handlebars is really well suited for organizing and managing the templates of an entire app or complex widget because of its partials and helpers features. Template.Micro is great for small templates, or when you need more powerful templates and its compilation engine is <em>extremely</em> small.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
By making Template.Micro's public API very similar to Handlebars, we've made it possible to use the two template engines interchangeably via the <code>Y.Template</code> normalization API. When you need to compile templates on the client, it is <strong>strongly recommend</strong> that you use Micro templates, because Template.Micro's compiler is <em>much</em> smaller than Handlebars' compiler &mdash; 0.5KB vs 9KB (minified and gzipped) respectively.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
<h3 id="instantiating-a-template-engine">Instantiating a Template Engine</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
While you can use a specific template engine directly, it is recommended that you create an instance of the generic <code>Y.Template</code> engine wrapper. Doing so allows for greater flexibility and interoperability as described in the previous section.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
To create a template engine instance, you must first determine which underlying engine you want to use. The two template engines included in YUI are <a href="../handlebars/index.html">Handlebars</a> and <a href="#using-templatemicro">Template.Micro</a>. If you're looking to use a different engine, refer to <a href="#creating-a-custom-template-engine">Creating a Custom Template Engine</a> section below.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
Once you've determined the underlying template engine, you'll need to load the appropriate YUI module to fulfill how you plan to use templates. Refer to the following table of YUI modules to understand what each module provides:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
<table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
    <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
            <th>Module</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
            <th>Compiler</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
            <th>Description</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
    </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
    <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
            <td style="white-space: nowrap;"><code>template-base</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
            <td>No</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
                <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
                Provides a generic API for using template engines such as <code>Handlebars</code> and <code>Y.Template.Micro</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
                </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
            <td style="white-space: nowrap;"><code>template-micro</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
            <td>Yes</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
                <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
                Adds the <code>Y.Template.Micro</code> template engine, which provides fast, simple string-based micro-templating similar to ERB or Underscore templates.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
                </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
            <td style="white-space: nowrap;"><code>template</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
            <td>Yes</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
                <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
                Virtual rollup of the <code>template-base</code> and <code>template-micro</code> modules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
                </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
            <td style="white-space: nowrap;"><code>handlebars-base</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
            <td>No</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
                <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
                Provides basic Handlebars template rendering functionality. Use this module when you only need to render pre-compiled templates.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
                </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
            <td style="white-space: nowrap;"><code>handlebars-compiler</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
            <td>Yes</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
                <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
                Handlebars parser and compiler. Use this module when you need to compile Handlebars templates.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
                </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
            <td style="white-space: nowrap;"><code>handlebars</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
            <td>Yes</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
                <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
                Virtual rollup of the <code>handlebars-base</code> and <code>handlebars-compiler</code> modules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
                </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
    </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
<h4 id="using-micro-templates">Using Micro Templates</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
When working with Micro templates, it's easiest to use the <code>template</code> virtual rollup module. The <code>Y.Template.Micro</code> compiler is small enough that it is included with the runtime functionality.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
The following example creates two template engine instances with are functionally equivalent and both backed by Template.Micro:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
<pre class="code prettyprint lang-javascript">YUI().use(&#x27;template&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
    var microExplicit, microDefault;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
    &#x2F;&#x2F; Creates a template engine instance and explicitly specifies the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
    &#x2F;&#x2F; underlying engine.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
    microExplicit = new Y.Template(Y.Template.Micro);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
    &#x2F;&#x2F; Creates another template engine instance with the same functionality,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
    &#x2F;&#x2F; but relies on &#x60;Y.Template.Micro&#x60; being defined as the underlying engine
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
    &#x2F;&#x2F; by default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
    microDefault = new Y.Template();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
<h4 id="using-handlebars-templates">Using Handlebars Templates</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
When working with Handlebars templates, you'll need to determine if the need the Handlebars compiler functionality provided by the <code>handlebars-compiler</code> module. It is recommended that Handlebars templates be <a href="../handlebars/index.html#precompiling-templates">precompiled</a>, enabling the client code to use the lighter and faster <code>handlebars-base</code> module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
The following example loads only the Handlebars runtime and generic <code>Y.Template()</code> wrapper API. It assumes that all templates have previously been precompiled on the server or during a build step:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
<pre class="code prettyprint lang-javascript">YUI().use(&#x27;template-base&#x27;, &#x27;handlebars-base&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
    &#x2F;&#x2F; Creates a limited template engine instance using Handlebars as the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
    &#x2F;&#x2F; underlaying engine, but with only the runtime functionality.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
    var handlebars = new Y.Template(Y.Handlebars);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
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
<strong>Note:</strong> In the above example, the <code>handlebars</code> engine does <strong>not</strong> have the ability to <code>render()</code>, <code>compile()</code>, or <code>precompile()</code> template. It only has the ability to <code>revive()</code> and execute precompiled templates.
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
The following example, uses the <code>handlebars</code> virtual rollup module which includes the <code>handlebars-compiler</code>. This enables the Handlebars-backed template engine instances to use the <a href="http://yuilibrary.com/yui/docs/api/classes/Template.html">full API</a>:
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-javascript">YUI().use(&#x27;template-base&#x27;, &#x27;handlebars&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
    &#x2F;&#x2F; Creates a template engine instance using Handlebars as the underlaying
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
    &#x2F;&#x2F; engine, with both the runtime and compiler functionality.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
    var handlebars = new Y.Template(Y.Handlebars);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
<h3 id="compiling-and-rendering-templates">Compiling and Rendering Templates</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
Both Handlebars and Micro 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-and-reviving-templates">precompiled</a> on the server or at build time and then rendered on the client for optimal performance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
Before compiling a template string, a template engine needs to be created. Once the engine instance has been created, the template string can be passed to its <a href="http://yuilibrary.com/yui/docs/api/classes/Template.html#method_compile"><code>compile()</code></a> method. What's returned is a reusable function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
<pre class="code prettyprint lang-javascript">var engine, template;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
&#x2F;&#x2F; Create a Template.Micro engine instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
engine = new Y.Template();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
&#x2F;&#x2F; Compile a template into a reusable function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
template = engine.compile(&#x27;My favorite animal is a &lt;%= this.animal %&gt;.&#x27;);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
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
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
   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
<pre class="code prettyprint lang-javascript">&#x2F;&#x2F; Render a previously compiled template.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
var output = template({animal: &#x27;Rhino&#x27;});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
Y.log(output); &#x2F;&#x2F; =&gt; &quot;My favorite animal is a Rhino.&quot;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
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
   311
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
<pre class="code prettyprint lang-javascript">&#x2F;&#x2F; Re-render a previously compiled template.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
output = template({animal: &#x27;Spotted Cuscus&#x27;});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
Y.log(output); &#x2F;&#x2F; =&gt; &quot;My favorite animal is a Spotted Cuscus.&quot;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
If you don't plan to use a template more than once, you can compile and render it in a single step with the template engine's <a href="http://yuilibrary.com/yui/docs/api/classes/Template.html#method_render"><code>render()</code></a> method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
<pre class="code prettyprint lang-javascript">&#x2F;&#x2F; Compile and render a template in a single step.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
output = engine.render(&#x27;My favorite animal is a &lt;%= this.animal %&gt;.&#x27;, {animal: &#x27;Rhino&#x27;});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
Y.log(output); &#x2F;&#x2F; =&gt; &quot;My favorite animal is a Rhino.&quot;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
<strong> Note:</strong> The above examples are using Micro templates. If these examples used Handlebars templates, the <code>engine</code> instance would have been created using <code>Y.Handlebars</code>, and template syntax would have used <code>{{animal}}</code> instead of <code>&lt;%= this.animal %&gt;</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
<h3 id="precompiling-and-reviving-templates">Precompiling and Reviving Templates</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
Since Micro and 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 in the case of Handlebars), 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
   335
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
The main benefit of precompilation is performance. Not only does the client not need to go through the compile step, but if your using a template engine like Handlebars, you don't even have to load the compiler on the client! All the client needs in order to render a precompiled template is the engine's runtime. In the case of Handlebars this is a 9KB (minified and gzipped) savings.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
<code>Y.Template</code> engine instances have a <a href="http://yuilibrary.com/yui/docs/api/classes/Template.html#method_precompile"><code>precompile()</code> method</a> which uses the underlaying <code>engine</code> to convert the specified <code>text</code> into a string of JavaScript source code. This string of code which represents the template, can later be revived using the engine instance's <a href="http://yuilibrary.com/yui/docs/api/classes/Template.html#method_revive"><code>revive()</code> method</a> which turns it into a JavaScript function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
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
   347
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
    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.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
    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 <code>Y.Template</code> engine instance's <code>revive()</code> method, which will "rehydrate" it into an executable template function using the current template engine.
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
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
</ul>
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
For more details, refer to the Precompiling and Reviving Templates sections of the <a href="#precompiling-and-reviving-micro-templates">Template.Micro</a> and <a href="../handlebars/index.html#precompiling-templates">Handlebars</a> user guides.
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
<h3 id="creating-a-custom-template-engine">Creating a Custom Template Engine</h3>
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
The generic <code>Y.Template</code> interface is <a href="#generic-template-api">designed</a> to work with a variety of string -> function template engines. To implement a custom underlaying template engine for <code>Y.Template</code>, refer to the following list of methods and their descriptions which need to be implemented:
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
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
    <dt><code>compile( text , [options] )</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
        Compiles a string template into a reusable function and returns that function to the caller.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
        The core concept of a string -> function template engine is its compilation method. A custom template engine <em>must</em> implement this method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
    <dt><code>render( text , data , [options] )</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
        Compiles and renders a template in a single step, and returns the rendered result.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
        A custom template engine does <em>not</em> have to implement this method. It is merely provided as a convenience to the user. If the underlying engine does not implement this method, the <code>compile()</code> method will be called and the resulting function will be invoked.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
    <dt><code>precompile( text , [options] )</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
        Precompiles a string template into a new string containing JavaScript source code for the precompiled template and returns it to the caller. The <code>revive()</code> method is this method's companion, it converts the precompiled template back into a renderable function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
        A custom template engine does <em>not</em> have to implement this method. If precompilation is a feature of the underlying template engine, then the <code>revive()</code> method <em>must</em> also be implemented.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
    <dt><code>revive( precompiled , [options] )</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
        Revives a precompiled template function into an executable template function and returns that function to the caller. The precompiled code must already have been evaluated; this method won't evaluate it for you.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
        This is a companion method to the <code>precompile()</code> method and it <em>must</em> be implemented if the underlying template engine supports precompilation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
<h2 id="using-templatemicro">Using <code>Template.Micro</code></h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
<code>Y.Template.Micro</code> is a string-based micro-templating language similar to <a href="http://ruby-doc.org/stdlib-1.9.3/libdoc/erb/rdoc/ERB.html">ERB</a> and <a href="http://underscorejs.org/#template">Underscore</a> templates. Template.Micro is great for small, powerful templates, and its compilation engine is <em>extremely</em> fast with a small footprint.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
Compared with the features of Handlebars, Template.Micro is much simpler. Using the <a href="#generic-template-api">generic engine API</a> provided by <code>Y.Template</code>, Micro and Handlebars templates can be used interchangeably. This gives you a powerful way to customize a component's Handlebars templates by overriding them with Micro templates, and not incur the cost of loading the <code>handlebars-compiler</code> module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
<h3 id="template-syntax">Template Syntax</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
<h4 id="basic-expressions">Basic Expressions</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
Within a Micro template, use <code>&lt;%= ... %&gt;</code> to output the value of an expression (where <code>...</code> is the JavaScript expression or data variable to evaluate). The output will be <strong>HTML-escaped by default.</strong>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
A simple Template.Micro expression looks like this:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
<pre class="code prettyprint">&lt;h1&gt;&lt;%= this.title %&gt;&lt;&#x2F;h1&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
This tells Template.Micro:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
<ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
        if there exists a <code>title</code> property in the current context in which the template function was executed, and that property is not falsy or an empty array, insert its value here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
        Otherwise, insert an empty string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
</ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
The following example shows how the data context is defined when executing a Micro template function:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
<pre class="code prettyprint lang-javascript">var micro   = new Y.Template(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
    heading = micro.compile(&#x27;&lt;h1&gt;&lt;%= this.title %&gt;&lt;&#x2F;h1&gt;&#x27;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
    output;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
&#x2F;&#x2F; The object passed to the template function becomes the context in which the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
&#x2F;&#x2F; template is executed. This object is also available through the &#x60;data&#x60;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
&#x2F;&#x2F; variable within the template&#x27;s expressions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
output = heading({title: &#x27;The Adventures of the Spotted Cuscus&#x27;});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
Y.log(output); &#x2F;&#x2F; =&gt; &quot;&lt;h1&gt;The Adventures of the Spotted Cuscus&lt;&#x2F;h1&gt;&quot;</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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
<strong>Note:</strong> The template functions are <code>call()</code>-ed with the context of the object which is passed to the template function. This object is also available through the <code>data</code> variable. Therefore, <code>data === this</code>, within the template expressions. The previous template could have been written as:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
<pre class="code prettyprint">&lt;h1&gt;&lt;%= data.title %&gt;&lt;&#x2F;h1&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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
<h4 id="html-escaping">HTML Escaping</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
By default, content rendered using a percent-equals expression like <code>&lt;%= foo %&gt;</code> will automatically be HTML-escaped for safety. To render unescaped HTML output, use a percent-double-equals expression like <code>&lt;%== foo %&gt;</code>. <strong>Only use a percent-double-equals expression for content you trust!</strong> Never use it to render unfiltered user input.
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
<h4 id="inline-code-code-blocks">Inline Code &amp; Code Blocks</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
To execute arbitrary JavaScript code within the template without rendering its output, use <code>&lt;% ... %&gt;</code> (where <code>...</code> is the code to be executed). This allows the use of if/else blocks, loops, function calls, etc., although it's recommended that you avoid embedding anything beyond basic flow control logic in your templates.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
<table class="micro-code">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
    <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
            <th colspan="2">Template Source</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
            <td colspan="2" width="100%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
<pre class="code prettyprint lang-html">&lt;h1&gt;Animals&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
&lt;ul class=&quot;&lt;%= this.classNames.list %&gt;&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
  &lt;% Y.Array.each(this.animals, function (animal, i) { %&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
    &lt;li class=&quot;&lt;%= i % 2 ? &#x27;odd&#x27; : &#x27;even&#x27; %&gt;&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
        &lt;%= animal %&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
    &lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
  &lt;% }); %&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
&lt;&#x2F;ul&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
            </td>
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
            <th style="padding-top: 0.5em;">Data</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
            <th style="padding-top: 0.5em;">Output</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
            <td width="50%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
<pre class="code prettyprint lang-javascript">{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
    classNames: {list: &#x27;animals&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
    animals: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
        &#x27;Rhino&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
        &#x27;Plain Tiger butterfly&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
        &#x27;Spotted Cuscus&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
    ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
            <td width="50%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
<pre class="code prettyprint lang-html">&lt;h1&gt;Animals&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
&lt;ul class=&quot;animals&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
    &lt;li class=&quot;even&quot;&gt;Rhino&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
    &lt;li class=&quot;odd&quot;&gt;Plain Tiger butterfly&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
    &lt;li class=&quot;even&quot;&gt;Spotted Cuscus&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
&lt;&#x2F;ul&gt;</pre>
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>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
    </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
<h3 id="precompiling-and-reviving-micro-templates">Precompiling and Reviving Micro Templates</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
Precompiling Micro templates <a href="#precompiling-and-reviving-templates">has advantages</a>, especially when an app uses many templates. The rest of this section will demonstrate how to precompile templates on the server.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
To precompile Micro 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
   556
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
<pre class="code terminal"><span class="noselect">$ </span>npm install yui</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
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
   563
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
Next, in your application code, call the <a href="http://yuilibrary.com/yui/docs/api/classes/Template.Micro.html#method_precompile"><code>precompile()</code></a> method to precompile a Micro template. It will return a string containing JavaScript code.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
<pre class="code prettyprint lang-javascript">&#x2F;&#x2F; Load the YUI Template.Micro module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
var Micro = require(&#x27;yui&#x2F;template-micro&#x27;).Template.Micro;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   572
&#x2F;&#x2F; Precompile a template string (pass any string you like here).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
var precompiled = Micro.precompile(&#x27;My favorite animal is a &lt;%= this.animal %&gt;.&#x27;);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
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
   578
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
<pre class="code prettyprint lang-javascript">function (Y, $e, data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
var $b=&#x27;&#x27;, $v=function (v){return v || v === 0 ? v : $b;}, $t=&#x27;My favorite animal is a &#x27;+
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
$e($v( this.animal ))+
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
&#x27;.&#x27;;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
return $t;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
}</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
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>template</code> YUI module, create a <code>Y.Template</code> engine instance, and pass the precompiled template to its <a href="http://yuilibrary.com/yui/docs/api/classes/Template.html#method_revive"><code>revive()</code></a> method to convert it into a renderable template function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
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
   594
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
<pre class="code prettyprint lang-javascript">#!&#x2F;usr&#x2F;bin&#x2F;env node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
var Micro   = require(&#x27;yui&#x2F;template-micro&#x27;).Template.Micro,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
    express = require(&#x27;express&#x27;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
    app     = express(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
    precompiled = Micro.precompile(&#x27;My favorite animal is a &lt;%= this.animal %&gt;.&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
app.get(&#x27;&#x2F;&#x27;, function (req, res) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
    res.send(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
        &#x27;&lt;html&gt;&lt;body&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
            &#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
   607
            &#x27;&lt;script&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
                &#x27;YUI().use(&quot;template&quot;, function (Y) {&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   609
                    &#x27;var micro    = new Y.Template(),&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
                    &#x27;    template = micro.revive(&#x27; + precompiled + &#x27;);&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
                    &#x27;Y.one(&quot;body&quot;).append(template({animal: &quot;Plain Tiger butterfly&quot;}));&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
                &#x27;});&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
            &#x27;&lt;&#x2F;script&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
        &#x27;&lt;&#x2F;body&gt;&lt;&#x2F;html&gt;&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
    );
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
app.listen(7000);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
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
   623
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
<h3 id="customizing-template-syntax">Customizing Template Syntax</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
Micro templates have a simple syntax, there are only three forms:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
    <dt><code>&lt;%= ... %&gt;</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
        Safely outputs the value of a JavaScript expression. The output will be HTML-escaped by default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
    <dt><code>&lt;%== ... %&gt;</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
        Outputs the raw value of a JavaScript expression. This does <em>not</em> HTML-escape the output. Never use it to render unfiltered user input.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
    <dt><code>&lt;% ... %&gt;</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
        Executes arbitrary JavaScript code within the template without rendering its output.
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
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
These syntax identifiers are defined as RegExp on <a href="http://yuilibrary.com/yui/docs/api/classes/Template.Micro.html#property_options"><code>Y.Template.Micro.options</code></a>. If you wish to define a custom syntax for your Micro templates, you can do so by defining new RegExps for your custom identifiers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
<h4 id="defining-a-handlebars-like-syntax">Defining a Handlebars-like Syntax</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
The following example will define a Handlebars-like Micro template syntax:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
    <dt><code>{{ ... }}</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
        Safely outputs the value of a JavaScript expression. The output will be HTML-escaped by default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
    <dt><code>{{{ ... }}}</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
        Outputs the raw value of a JavaScript expression. This does <em>not</em> HTML-escape the output. Never use it to render unfiltered user input.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
    <dt><code>{{% ... %}}</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
    <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
        Executes arbitrary JavaScript code within the template without rendering its output.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
<pre class="code prettyprint lang-javascript">&#x2F;&#x2F; Create RegExps which define our new Micro template syntax.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
Y.mix(Y.Template.Micro.options, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
    code         : &#x2F;\{\{%([\s\S]+?)%\}\}&#x2F;g,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
    escapedOutput: &#x2F;\{\{(?!%)([\s\S]+?)\}\}&#x2F;g,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
    rawOutput    : &#x2F;\{\{\{([\s\S]+?)\}\}\}&#x2F;g
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
}, true);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
<table class="micro-code">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   696
    <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
            <th colspan="2">Template Source</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
            <td colspan="2" width="100%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
<pre class="code prettyprint lang-html">&lt;h1&gt;Animals&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
&lt;ul class=&quot;{{ this.classNames.list }}&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
  {{% Y.Array.each(this.animals, function (animal, i) { %}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
    &lt;li class=&quot;{{ i % 2 ? &#x27;odd&#x27; : &#x27;even&#x27; }}&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
        {{ animal }}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
    &lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
  {{% }); %}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
&lt;&#x2F;ul&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
            <th style="padding-top: 0.5em;">Data</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   718
            <th style="padding-top: 0.5em;">Output</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   722
            <td width="50%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   723
<pre class="code prettyprint lang-javascript">{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   724
    classNames: {list: &#x27;animals&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   725
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   726
    animals: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   727
        &#x27;Rhino&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   728
        &#x27;Plain Tiger butterfly&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   729
        &#x27;Spotted Cuscus&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   730
    ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   731
}</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
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   734
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   735
            <td width="50%">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   736
<pre class="code prettyprint lang-html">&lt;h1&gt;Animals&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   737
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   738
&lt;ul class=&quot;animals&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   739
    &lt;li class=&quot;even&quot;&gt;Rhino&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   740
    &lt;li class=&quot;odd&quot;&gt;Plain Tiger butterfly&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   741
    &lt;li class=&quot;even&quot;&gt;Spotted Cuscus&lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   742
&lt;&#x2F;ul&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   743
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   744
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   745
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   746
    </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   747
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   748
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   749
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   750
<strong>Note:</strong> The syntax identifiers can be specified on a per-template basis by passing <code>options</code> as the second argument to the <code>compile()</code>, <code>precompile()</code>, or <code>render()</code> methods. Alternatively you can specify <code>defaults</code> when using the <a href="#generic-template-api">generic Template API</a>, doing so will only affect how the templates are process for that engine instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   751
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   752
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   753
<h2 id="using-templates-in-custom-components">Using Templates in Custom Components</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   754
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   755
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   756
When creating custom components for your app, it's natural to bundle the templates with the component that will use them. The following examples show how to create a custom view component which uses templates.
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   759
<h3 id="custom-view-with-embeded-template">Custom View with Embeded Template</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   760
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   761
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   762
This example shows how to create a very basic view with an embedded template:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   763
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   764
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   765
<pre class="code prettyprint lang-javascript">YUI().use(&#x27;template-micro&#x27;, &#x27;view&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   766
    Y.AnimalListView = Y.Base.create(&#x27;animalListView&#x27;, Y.View, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   767
        &#x2F;&#x2F; The compiled Micro template sits on the view&#x27;s prototype.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   768
        template: Y.Template.Micro.compile(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   769
            &#x27;&lt;ul class=&quot;animals&quot;&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   770
              &#x27;&lt;% Y.Array.each(this.animals, function (animal, i) { %&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   771
                &#x27;&lt;li class=&quot;&lt;% i % 2 ? &quot;odd&quot; : &quot;even&quot; %&gt;&quot;&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   772
                    &#x27;&lt;%= animal %&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   773
                &#x27;&lt;&#x2F;li&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   774
              &#x27;&lt;% }); %&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   775
            &#x27;&lt;&#x2F;ul&gt;&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   776
        ),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   777
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   778
        render: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   779
            var html = this.template({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   780
                animals: this.get(&#x27;animals&#x27;)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   781
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   782
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   783
            this.get(&#x27;container&#x27;).setHTML(html);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   784
            return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   785
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   786
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   787
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   788
    &#x2F;&#x2F; Create an instance of the view and render it to the &#x60;&lt;body&gt;&#x60;.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   789
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   790
    var animalListView = new Y.AnimalListView({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   791
        animals: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   792
            &#x27;Rhino&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   793
            &#x27;Plain Tiger butterfly&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   794
            &#x27;Spotted Cuscus&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   795
        ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   796
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   797
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   798
    animalListView.get(&#x27;container&#x27;).appendTo(&#x27;body&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   799
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   800
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   801
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   802
<h3 id="custom-view-with-external-template">Custom View with External Template</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   803
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   804
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   805
Usually embedding the template in your component's JavaScript code is bad practice. The following examples show two ways to externalize a component's templates.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   806
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   807
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   808
<h4 id="defining-templates-in-html">Defining Templates in HTML</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   809
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   810
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   811
One option is to embed your template inside a special <code>&lt;script&gt;</code> element, one whose <code>type</code> attribute is set to something which the browser will not process as JavaScript:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   812
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   813
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   814
<pre class="code prettyprint lang-html">&lt;script id=&quot;t-animals&quot; type=&quot;text&#x2F;x-template&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   815
    &lt;ul class=&quot;animals&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   816
      &lt;% Y.Array.each(this.animals, function (animal, i) { %&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   817
        &lt;li class=&quot;&lt;% i % 2 ? &#x27;odd&#x27; : &#x27;even&#x27; %&gt;&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   818
            &lt;%= animal %&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   819
        &lt;&#x2F;li&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   820
      &lt;% }); %&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   821
    &lt;&#x2F;ul&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   822
&lt;&#x2F;script&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   823
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   824
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   825
<pre class="code prettyprint lang-javascript">YUI().use(&#x27;node-base&#x27;, &#x27;template-micro&#x27;, &#x27;view&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   826
    Y.AnimalListView = Y.Base.create(&#x27;animalListView&#x27;, Y.View, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   827
        &#x2F;&#x2F; The template source is pulled from the HTML, then compiled into a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   828
        &#x2F;&#x2F; template function which sits on the view&#x27;s prototype.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   829
        template: Y.Template.Micro.compile(Y.one(&#x27;#t-animals&#x27;).getHTML()),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   830
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   831
        render: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   832
            var html = this.template({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   833
                animals: this.get(&#x27;animals&#x27;)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   834
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   835
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   836
            this.get(&#x27;container&#x27;).setHTML(html);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   837
            return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   838
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   839
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   840
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   841
    &#x2F;&#x2F; Create an instance of the view and render it to the &#x60;&lt;body&gt;&#x60;.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   842
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   843
    var animalListView = new Y.AnimalListView({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   844
        animals: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   845
            &#x27;Rhino&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   846
            &#x27;Plain Tiger butterfly&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   847
            &#x27;Spotted Cuscus&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   848
        ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   849
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   850
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   851
    animalListView.get(&#x27;container&#x27;).appendTo(&#x27;body&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   852
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   853
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   854
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   855
<h4 id="defining-templates-in-a-module">Defining Templates in a Module</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   856
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   857
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   858
When your custom component is used within multiple apps, you might not have control over the HTML of the page. A great option is to create a separate module which holds your template source which your view module can <code>require</code>:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   859
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   860
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   861
<pre class="code prettyprint lang-javascript">&#x2F;&#x2F; Defines a YUI module which will hold the template source for our view.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   862
YUI.add(&#x27;animalListTemplate&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   863
    Y.namespace(&#x27;AnimalListView&#x27;).template = Y.Template.Micro.compile(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   864
        &#x27;&lt;ul class=&quot;animals&quot;&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   865
          &#x27;&lt;% Y.Array.each(this.animals, function (animal, i) { %&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   866
            &#x27;&lt;li class=&quot;&lt;% i % 2 ? &quot;odd&quot; : &quot;even&quot; %&gt;&quot;&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   867
                &#x27;&lt;%= animal %&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   868
            &#x27;&lt;&#x2F;li&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   869
          &#x27;&lt;% }); %&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   870
        &#x27;&lt;&#x2F;ul&gt;&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   871
    );
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   872
}, &#x27;0.0.1&#x27;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   873
    requires: [&#x27;template-micro&#x27;]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   874
});</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
<pre class="code prettyprint lang-javascript">&#x2F;&#x2F; Defines a YUI module which defines our view and requires our template module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   878
YUI.add(&#x27;animalListView&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   879
    var AnimalListView = Y.Base.create(&#x27;animalListView&#x27;, Y.View, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   880
        render: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   881
            var html = AnimalListView.template({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   882
                animals: this.get(&#x27;animals&#x27;)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   883
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   884
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   885
            this.get(&#x27;container&#x27;).setHTML(html);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   886
            return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   887
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   888
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   889
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   890
    &#x2F;&#x2F; Properly exposes the view constructor while retaining the namespace.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   891
    Y.AnimalListView = Y.mix(AnimalListView, Y.AnimalListView);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   892
}, &#x27;0.0.1&#x27;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   893
    requires: [&#x27;animalListTemplate&#x27;, &#x27;view&#x27;]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   894
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   895
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   896
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   897
<pre class="code prettyprint lang-javascript">&#x2F;&#x2F; Create an instance of the view and render it to the &#x60;&lt;body&gt;&#x60;.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   898
YUI({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   899
    modules: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   900
        animalListTemplate: &#x27;&#x2F;animal-list-template.js&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   901
        animalListView    : &#x27;&#x2F;animal-list-view.js&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   902
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   903
}).use(&#x27;animalListView&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   904
    var animalListView = new Y.AnimalListView({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   905
        animals: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   906
            &#x27;Rhino&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   907
            &#x27;Plain Tiger butterfly&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   908
            &#x27;Spotted Cuscus&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   909
        ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   910
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   911
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   912
    animalListView.get(&#x27;container&#x27;).appendTo(&#x27;body&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   913
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   914
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   915
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   916
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   917
Refer to the <a href="../yui/create.html">Creating YUI Modules</a> user guide for more details.
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   920
<h2 id="best-practices">Best Practices</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   921
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   922
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   923
The following is a list of best practices to consider when using templates in your app and/or custom components:
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   926
<h3 id="less-logic-is-better">Less Logic is Better</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   927
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   928
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   929
Make sure not to embed too much logic in your templates, things can get out of control if you do. You should <em>avoid</em> template logic which has side effects! Micro templates allow you to embed any arbitrary JavaScript in your templates, while Handlebars templates are logic-less by design.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   930
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   931
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   932
<h3 id="externalize-templates">Externalize Templates</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   933
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   934
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   935
Avoid embedding huge template strings in your JavaScript code. Strive to separate your templates from the code that uses them, having your templates specified in separate files is best. The <a href="#defining-templates-in-a-module">template module example</a> above would ideally use a build-time process to wrap the template source with the YUI module registration wrapper.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   936
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   937
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   938
<h3 id="compile-once-render-often">Compile Once, Render Often</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   939
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   940
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   941
Template <a href="#instantiating-a-template-engine">compilation is expensive</a>. You should avoid compiling a template more than once. Ideally, you are <a href="#precompiling-and-reviving-templates">precompiling templates</a> on the server or during a build-time process to avoid the compilation step on the client.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   942
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   943
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   944
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   945
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   946
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   947
        <div class="yui3-u-1-4">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   948
            <div class="sidebar">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   949
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   950
                    <div id="toc" class="sidebox">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   951
                        <div class="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   952
                            <h2 class="no-toc">Table of Contents</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   953
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   954
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   955
                        <div class="bd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   956
                            <ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   957
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   958
<a href="#getting-started">Getting Started</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   959
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   960
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   961
<a href="#using-template">Using <code>Template</code></a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   962
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   963
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   964
<a href="#quick-start">Quick Start</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   965
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   966
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   967
<a href="#generic-template-api">Generic Template API</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   968
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   969
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   970
<a href="#instantiating-a-template-engine">Instantiating a Template Engine</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   971
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   972
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   973
<a href="#using-micro-templates">Using Micro Templates</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   974
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   975
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   976
<a href="#using-handlebars-templates">Using Handlebars Templates</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   977
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   978
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   979
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   980
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   981
<a href="#compiling-and-rendering-templates">Compiling and Rendering Templates</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   982
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   983
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   984
<a href="#precompiling-and-reviving-templates">Precompiling and Reviving Templates</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   985
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   986
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   987
<a href="#creating-a-custom-template-engine">Creating a Custom Template Engine</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   988
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   989
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   990
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   991
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   992
<a href="#using-templatemicro">Using <code>Template.Micro</code></a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   993
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   994
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   995
<a href="#template-syntax">Template Syntax</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   996
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   997
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   998
<a href="#basic-expressions">Basic Expressions</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   999
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1000
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1001
<a href="#html-escaping">HTML Escaping</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1002
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1003
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1004
<a href="#inline-code-code-blocks">Inline Code &amp; Code Blocks</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1005
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1006
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1007
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1008
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1009
<a href="#precompiling-and-reviving-micro-templates">Precompiling and Reviving Micro Templates</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1010
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1011
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1012
<a href="#customizing-template-syntax">Customizing Template Syntax</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1013
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1014
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1015
<a href="#defining-a-handlebars-like-syntax">Defining a Handlebars-like Syntax</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1016
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1017
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1018
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1019
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1020
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1021
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1022
<a href="#using-templates-in-custom-components">Using Templates in Custom Components</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1023
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1024
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1025
<a href="#custom-view-with-embeded-template">Custom View with Embeded Template</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1026
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1027
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1028
<a href="#custom-view-with-external-template">Custom View with External Template</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1029
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1030
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1031
<a href="#defining-templates-in-html">Defining Templates in HTML</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1032
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1033
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1034
<a href="#defining-templates-in-a-module">Defining Templates in a Module</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1035
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1036
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1037
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1038
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1039
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1040
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1041
<a href="#best-practices">Best Practices</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1042
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1043
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1044
<a href="#less-logic-is-better">Less Logic is Better</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1045
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1046
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1047
<a href="#externalize-templates">Externalize Templates</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1048
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1049
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1050
<a href="#compile-once-render-often">Compile Once, Render Often</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1051
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1052
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1053
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1054
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1055
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1056
                    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1057
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1058
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
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1062
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1063
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1064
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1065
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1066
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1067
<script src="../assets/vendor/prettify/prettify-min.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1068
<script>prettyPrint();</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1069
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1070
<script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1071
YUI.Env.Tests = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1072
    examples: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1073
    project: '../assets',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1074
    assets: '../assets/template',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1075
    name: 'template',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1076
    title: 'Template',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1077
    newWindow: '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1078
    auto:  false 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1079
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1080
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1081
</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1082
<script src="../assets/yui/test-runner.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1083
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1084
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1085
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1086
</body>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1087
</html>