New file |
0,0 → 1,374 |
<div class="body-wrap"> |
<div class="top-tools"> |
<a class="inner-link" href="#Ext.XTemplate-props"><img src="../resources/images/default/s.gif" class="item-icon icon-prop">Properties</a> |
<a class="inner-link" href="#Ext.XTemplate-methods"><img src="../resources/images/default/s.gif" class="item-icon icon-method">Methods</a> |
<a class="inner-link" href="#Ext.XTemplate-events"><img src="../resources/images/default/s.gif" class="item-icon icon-event">Events</a> |
<a class="bookmark" href="../docs/?class=Ext.XTemplate"><img src="../resources/images/default/s.gif" class="item-icon icon-fav">Direct Link</a> |
</div> |
<div class="inheritance res-block"> |
<pre class="res-block-inner"><a ext:cls="Ext.Template" ext:member="" href="output/Ext.Template.html">Template</a> |
<img src="resources/elbow-end.gif"/>XTemplate</pre></div> |
<h1>Class Ext.XTemplate</h1> |
<table cellspacing="0"> |
<tr><td class="label">Package:</td><td class="hd-info">Ext</td></tr> |
<tr><td class="label">Defined In:</td><td class="hd-info"><a href="../source/util/XTemplate.js" target="_blank">XTemplate.js</a></td></tr> |
<tr><td class="label">Class:</td><td class="hd-info">XTemplate</td></tr> |
<tr><td class="label">Extends:</td><td class="hd-info"><a ext:cls="Ext.Template" ext:member="" href="output/Ext.Template.html">Template</a></td></tr> |
</table> |
<div class="description"> |
<p>A template class that supports advanced functionality like autofilling arrays, conditional processing with |
basic comparison operators, sub-templates, basic math function support, special built-in template variables, |
inline code execution and more. XTemplate also provides the templating mechanism built into <a ext:cls="Ext.DataView" href="output/Ext.DataView.html">Ext.DataView</a>.</p> |
<p>XTemplate supports many special tags and built-in operators that aren't defined as part of the API, but are |
supported in the templates that can be created. The following examples demonstrate all of the supported features. |
This is the data object used for reference in each code example:</p> |
<pre><code>var data = { |
name: <em>'Jack Slocum'</em>, |
title: <em>'Lead Developer'</em>, |
company: <em>'Ext JS, LLC'</em>, |
email: <em>'jack@extjs.com'</em>, |
address: <em>'4 Red Bulls Drive'</em>, |
city: <em>'Cleveland'</em>, |
state: <em>'Ohio'</em>, |
zip: <em>'44102'</em>, |
drinks: [<em>'Red Bull'</em>, <em>'Coffee'</em>, <em>'Water'</em>], |
kids: [{ |
name: <em>'Sara Grace'</em>, |
age:3 |
},{ |
name: <em>'Zachary'</em>, |
age:2 |
},{ |
name: <em>'John James'</em>, |
age:0 |
}] |
};</code></pre> |
<p><b>Auto filling of arrays and scope switching</b><br/>Using the <tt>tpl</tt> tag and the <tt>for</tt> operator, |
you can switch to the scope of the object specified by <tt>for</tt> and access its members to populate the teamplte. |
If the variable in <tt>for</tt> is an array, it will auto-fill, repeating the template block inside the <tt>tpl</tt> |
tag for each item in the array:</p> |
<pre><code>var tpl = <b>new</b> Ext.XTemplate( |
<em>'<p>Name: {name}</p>'</em>, |
<em>'<p>Title: {title}</p>'</em>, |
<em>'<p>Company: {company}</p>'</em>, |
<em>'<p>Kids: '</em>, |
<em>'<tpl <b>for</b>="kids">'</em>, |
<em>'<p>{name}</p>'</em>, |
<em>'</tpl></p>'</em> |
); |
tpl.overwrite(panel.body, data);</code></pre> |
<p><b>Access to parent object from within sub-template scope</b><br/>When processing a sub-template, for example while |
looping through a child array, you can access the parent object's members via the <tt>parent</tt> object:</p> |
<pre><code>var tpl = <b>new</b> Ext.XTemplate( |
<em>'<p>Name: {name}</p>'</em>, |
<em>'<p>Kids: '</em>, |
<em>'<tpl <b>for</b>="kids">'</em>, |
<em>'<tpl <b>if</b>="age > 1">'</em>, |
<em>'<p>{name}</p>'</em>, |
<em>'<p>Dad: {parent.name}</p>'</em>, |
<em>'</tpl>'</em>, |
<em>'</tpl></p>'</em> |
); |
tpl.overwrite(panel.body, data);</code></pre> |
<p><b>Array item index and basic math support</b> <br/>While processing an array, the special variable <tt>{#}</tt> |
will provide the current array index + 1 (starts at 1, not 0). Templates also support the basic math operators |
+ - * and / that can be applied directly on numeric data values:</p> |
<pre><code>var tpl = <b>new</b> Ext.XTemplate( |
<em>'<p>Name: {name}</p>'</em>, |
<em>'<p>Kids: '</em>, |
<em>'<tpl <b>for</b>="kids">'</em>, |
<em>'<tpl <b>if</b>="age > 1">'</em>, |
<em>'<p>{#}: {name}</p>'</em>, <i>// <-- Auto-number each item</i> |
<em>'<p>In 5 Years: {age+5}</p>'</em>, <i>// <-- Basic math</i> |
<em>'<p>Dad: {parent.name}</p>'</em>, |
<em>'</tpl>'</em>, |
<em>'</tpl></p>'</em> |
); |
tpl.overwrite(panel.body, data);</code></pre> |
<p><b>Auto-rendering of flat arrays</b> <br/>Flat arrays that contain values (and not objects) can be auto-rendered |
using the special <tt>{.}</tt> variable inside a loop. This variable will represent the value of |
the array at the current index:</p> |
<pre><code>var tpl = <b>new</b> Ext.XTemplate( |
<em>'<p>{name}\'</em>s favorite beverages:</p>', |
<em>'<tpl <b>for</b>="drinks">'</em>, |
<em>'<div> - {.}</div>'</em>, |
<em>'</tpl>'</em> |
); |
tpl.overwrite(panel.body, data);</code></pre> |
<p><b>Basic conditional logic</b> <br/>Using the <tt>tpl</tt> tag and the <tt>if</tt> |
operator you can provide conditional checks for deciding whether or not to render specific parts of the template. |
Note that there is no <tt>else</tt> operator — if needed, you should use two opposite <tt>if</tt> statements. |
Properly-encoded attributes are required as seen in the following example:</p> |
<pre><code>var tpl = <b>new</b> Ext.XTemplate( |
<em>'<p>Name: {name}</p>'</em>, |
<em>'<p>Kids: '</em>, |
<em>'<tpl <b>for</b>="kids">'</em>, |
<em>'<tpl <b>if</b>="age &gt; 1">'</em>, <i>// <-- Note that the > is encoded</i> |
<em>'<p>{name}</p>'</em>, |
<em>'</tpl>'</em>, |
<em>'</tpl></p>'</em> |
); |
tpl.overwrite(panel.body, data);</code></pre> |
<p><b>Ability to execute arbitrary inline code</b> <br/>In an XTemplate, anything between {[ ... ]} is considered |
code to be executed in the scope of the template. There are some special variables available in that code: |
<ul> |
<li><b><tt>values</tt></b>: The values in the current scope. If you are using scope changing sub-templates, you |
can change what <tt>values</tt> is.</li> |
<li><b><tt>parent</tt></b>: The scope (values) of the ancestor template.</li> |
<li><b><tt>xindex</tt></b>: If you are in a looping template, the index of the loop you are in (1-based).</li> |
<li><b><tt>xcount</tt></b>: If you are in a looping template, the total length of the array you are looping.</li> |
<li><b><tt>fm</tt></b>: An alias for <tt>Ext.util.Format</tt>.</li> |
</ul> |
This example demonstrates basic row striping using an inline code block and the <tt>xindex</tt> variable:</p> |
<pre><code>var tpl = <b>new</b> Ext.XTemplate( |
<em>'<p>Name: {name}</p>'</em>, |
<em>'<p>Company: {[company.toUpperCase() + '</em>, <em>' + title]}</p>'</em>, |
<em>'<p>Kids: '</em>, |
<em>'<tpl <b>for</b>="kids">'</em>, |
'<div class=<em>"{[xindex % 2 === 0 ? "</em>even<em>" : "</em>odd<em>"]}"</em>>, |
<em>'{name}'</em>, |
<em>'</div>'</em>, |
<em>'</tpl></p>'</em> |
); |
tpl.overwrite(panel.body, data);</code></pre> |
<p><b>Template member functions</b> <br/>One or more member functions can be defined directly on the config |
object passed into the XTemplate constructor for more complex processing:</p> |
<pre><code>var tpl = <b>new</b> Ext.XTemplate( |
<em>'<p>Name: {name}</p>'</em>, |
<em>'<p>Kids: '</em>, |
<em>'<tpl <b>for</b>="kids">'</em>, |
<em>'<tpl <b>if</b>="<b>this</b>.isGirl(name)">'</em>, |
<em>'<p>Girl: {name} - {age}</p>'</em>, |
<em>'</tpl>'</em>, |
<em>'<tpl <b>if</b>="<b>this</b>.isGirl(name) == false">'</em>, |
<em>'<p>Boy: {name} - {age}</p>'</em>, |
<em>'</tpl>'</em>, |
<em>'<tpl <b>if</b>="<b>this</b>.isBaby(age)">'</em>, |
<em>'<p>{name} is a baby!</p>'</em>, |
<em>'</tpl>'</em>, |
<em>'</tpl></p>'</em>, { |
isGirl: <b>function</b>(name){ |
<b>return</b> name == <em>'Sara Grace'</em>; |
}, |
isBaby: <b>function</b>(age){ |
<b>return</b> age < 1; |
} |
}); |
tpl.overwrite(panel.body, data);</code></pre> </div> |
|
<div class="hr"></div> |
<a id="Ext.XTemplate-props"></a> |
<h2>Public Properties</h2> |
<div class="no-members">This class has no public properties.</div> <a id="Ext.XTemplate-methods"></a> |
<h2>Public Methods</h2> |
<table cellspacing="0" class="member-table"> |
<tr> |
<th class="sig-header" colspan="2">Method</th> |
<th class="msource-header">Defined By</th> |
</tr> |
<tr class="method-row expandable"> |
<td class="micon"><a class="exi" href="#expand"> </a></td> |
<td class="sig"> |
<a id="Ext.XTemplate-XTemplate"></a> |
<b>XTemplate</b>( <code>String/Array/Object parts</code> ) <div class="mdesc"> |
<div class="short"></div> |
<div class="long"> |
<div class="mdetail-params"> |
<strong>Parameters:</strong> |
<ul><li><code>parts</code> : String/Array/Object<div class="sub-desc">The HTML fragment or an array of fragments to join(""), or multiple arguments |
to join("") that can also include a config object</div></li> </ul> |
<strong>Returns:</strong> |
<ul> |
<li><code></code></li> |
</ul> |
</div> |
</div> |
</div> |
</td> |
<td class="msource">XTemplate</td> |
</tr> |
<tr class="method-row alt expandable"> |
<td class="micon"><a class="exi" href="#expand"> </a></td> |
<td class="sig"> |
<a id="Ext.XTemplate-XTemplate.from"></a> |
<b>XTemplate.from</b>( <code>String/HTMLElement el</code> ) : Ext.Template <div class="mdesc"> |
<div class="short"><static> Creates a template from the passed element's value (<i>display:none</i> textarea, preferred) or innerHTML.</div> |
<div class="long"> |
<static> Creates a template from the passed element's value (<i>display:none</i> textarea, preferred) or innerHTML. <div class="mdetail-params"> |
<strong>Parameters:</strong> |
<ul><li><code>el</code> : String/HTMLElement<div class="sub-desc">A DOM element or its id</div></li> </ul> |
<strong>Returns:</strong> |
<ul> |
<li><code>Ext.Template</code><div class="sub-desc">The created template</div></li> |
</ul> |
</div> |
</div> |
</div> |
</td> |
<td class="msource">XTemplate</td> |
</tr> |
<tr class="method-row inherited expandable"> |
<td class="micon"><a class="exi" href="#expand"> </a></td> |
<td class="sig"> |
<a id="Ext.XTemplate-append"></a> |
<b>append</b>( <code>Mixed el</code>, <code>Object/Array values</code>, <span class="optional" title="Optional">[<code>Boolean returnElement</code>]</span> ) : HTMLElement/Ext.Element <div class="mdesc"> |
<div class="short">Applies the supplied values to the template and appends the new node(s) to el.</div> |
<div class="long"> |
Applies the supplied values to the template and appends the new node(s) to el. <div class="mdetail-params"> |
<strong>Parameters:</strong> |
<ul><li><code>el</code> : Mixed<div class="sub-desc">The context element</div></li><li><code>values</code> : Object/Array<div class="sub-desc">The template values. Can be an array if your params are numeric (i.e. {0}) or an object (i.e. {foo: 'bar'})</div></li><li><code>returnElement</code> : Boolean<div class="sub-desc">(optional) true to return a Ext.Element (defaults to undefined)</div></li> </ul> |
<strong>Returns:</strong> |
<ul> |
<li><code>HTMLElement/Ext.Element</code><div class="sub-desc">The new node or Element</div></li> |
</ul> |
</div> |
</div> |
</div> |
</td> |
<td class="msource"><a ext:cls="Ext.Template" ext:member="#append" href="output/Ext.Template.html#append">Template</a></td> |
</tr> |
<tr class="method-row alt expandable"> |
<td class="micon"><a class="exi" href="#expand"> </a></td> |
<td class="sig"> |
<a id="Ext.XTemplate-apply"></a> |
<b>apply</b>() : void <div class="mdesc"> |
<div class="short">Alias of <a ext:cls="Ext.XTemplate" ext:member="applyTemplate" href="output/Ext.XTemplate.html#applyTemplate">applyTemplate</a>.</div> |
<div class="long"> |
Alias of <a ext:cls="Ext.XTemplate" ext:member="applyTemplate" href="output/Ext.XTemplate.html#applyTemplate">applyTemplate</a>. <div class="mdetail-params"> |
<strong>Parameters:</strong> |
<ul><li>None.</li> </ul> |
<strong>Returns:</strong> |
<ul> |
<li><code>void</code></li> |
</ul> |
</div> |
</div> |
</div> |
</td> |
<td class="msource">XTemplate</td> |
</tr> |
<tr class="method-row expandable"> |
<td class="micon"><a class="exi" href="#expand"> </a></td> |
<td class="sig"> |
<a id="Ext.XTemplate-applyTemplate"></a> |
<b>applyTemplate</b>( <code>Object values</code> ) : String <div class="mdesc"> |
<div class="short">Returns an HTML fragment of this template with the specified values applied.</div> |
<div class="long"> |
Returns an HTML fragment of this template with the specified values applied. <div class="mdetail-params"> |
<strong>Parameters:</strong> |
<ul><li><code>values</code> : Object<div class="sub-desc">The template values. Can be an array if your params are numeric (i.e. {0}) or an object (i.e. {foo: 'bar'})</div></li> </ul> |
<strong>Returns:</strong> |
<ul> |
<li><code>String</code><div class="sub-desc">The HTML fragment</div></li> |
</ul> |
</div> |
</div> |
</div> |
</td> |
<td class="msource">XTemplate</td> |
</tr> |
<tr class="method-row alt expandable"> |
<td class="micon"><a class="exi" href="#expand"> </a></td> |
<td class="sig"> |
<a id="Ext.XTemplate-compile"></a> |
<b>compile</b>() : Function <div class="mdesc"> |
<div class="short">Compile the template to a function for optimized performance. Recommended if the template will be used frequently.</div> |
<div class="long"> |
Compile the template to a function for optimized performance. Recommended if the template will be used frequently. <div class="mdetail-params"> |
<strong>Parameters:</strong> |
<ul><li>None.</li> </ul> |
<strong>Returns:</strong> |
<ul> |
<li><code>Function</code><div class="sub-desc">The compiled function</div></li> |
</ul> |
</div> |
</div> |
</div> |
</td> |
<td class="msource">XTemplate</td> |
</tr> |
<tr class="method-row inherited expandable"> |
<td class="micon"><a class="exi" href="#expand"> </a></td> |
<td class="sig"> |
<a id="Ext.XTemplate-insertAfter"></a> |
<b>insertAfter</b>( <code>Mixed el</code>, <code>Object/Array values</code>, <span class="optional" title="Optional">[<code>Boolean returnElement</code>]</span> ) : HTMLElement/Ext.Element <div class="mdesc"> |
<div class="short">Applies the supplied values to the template and inserts the new node(s) after el.</div> |
<div class="long"> |
Applies the supplied values to the template and inserts the new node(s) after el. <div class="mdetail-params"> |
<strong>Parameters:</strong> |
<ul><li><code>el</code> : Mixed<div class="sub-desc">The context element</div></li><li><code>values</code> : Object/Array<div class="sub-desc">The template values. Can be an array if your params are numeric (i.e. {0}) or an object (i.e. {foo: 'bar'})</div></li><li><code>returnElement</code> : Boolean<div class="sub-desc">(optional) true to return a Ext.Element (defaults to undefined)</div></li> </ul> |
<strong>Returns:</strong> |
<ul> |
<li><code>HTMLElement/Ext.Element</code><div class="sub-desc">The new node or Element</div></li> |
</ul> |
</div> |
</div> |
</div> |
</td> |
<td class="msource"><a ext:cls="Ext.Template" ext:member="#insertAfter" href="output/Ext.Template.html#insertAfter">Template</a></td> |
</tr> |
<tr class="method-row inherited alt expandable"> |
<td class="micon"><a class="exi" href="#expand"> </a></td> |
<td class="sig"> |
<a id="Ext.XTemplate-insertBefore"></a> |
<b>insertBefore</b>( <code>Mixed el</code>, <code>Object/Array values</code>, <span class="optional" title="Optional">[<code>Boolean returnElement</code>]</span> ) : HTMLElement/Ext.Element <div class="mdesc"> |
<div class="short">Applies the supplied values to the template and inserts the new node(s) before el.</div> |
<div class="long"> |
Applies the supplied values to the template and inserts the new node(s) before el. <div class="mdetail-params"> |
<strong>Parameters:</strong> |
<ul><li><code>el</code> : Mixed<div class="sub-desc">The context element</div></li><li><code>values</code> : Object/Array<div class="sub-desc">The template values. Can be an array if your params are numeric (i.e. {0}) or an object (i.e. {foo: 'bar'})</div></li><li><code>returnElement</code> : Boolean<div class="sub-desc">(optional) true to return a Ext.Element (defaults to undefined)</div></li> </ul> |
<strong>Returns:</strong> |
<ul> |
<li><code>HTMLElement/Ext.Element</code><div class="sub-desc">The new node or Element</div></li> |
</ul> |
</div> |
</div> |
</div> |
</td> |
<td class="msource"><a ext:cls="Ext.Template" ext:member="#insertBefore" href="output/Ext.Template.html#insertBefore">Template</a></td> |
</tr> |
<tr class="method-row inherited expandable"> |
<td class="micon"><a class="exi" href="#expand"> </a></td> |
<td class="sig"> |
<a id="Ext.XTemplate-insertFirst"></a> |
<b>insertFirst</b>( <code>Mixed el</code>, <code>Object/Array values</code>, <span class="optional" title="Optional">[<code>Boolean returnElement</code>]</span> ) : HTMLElement/Ext.Element <div class="mdesc"> |
<div class="short">Applies the supplied values to the template and inserts the new node(s) as the first child of el.</div> |
<div class="long"> |
Applies the supplied values to the template and inserts the new node(s) as the first child of el. <div class="mdetail-params"> |
<strong>Parameters:</strong> |
<ul><li><code>el</code> : Mixed<div class="sub-desc">The context element</div></li><li><code>values</code> : Object/Array<div class="sub-desc">The template values. Can be an array if your params are numeric (i.e. {0}) or an object (i.e. {foo: 'bar'})</div></li><li><code>returnElement</code> : Boolean<div class="sub-desc">(optional) true to return a Ext.Element (defaults to undefined)</div></li> </ul> |
<strong>Returns:</strong> |
<ul> |
<li><code>HTMLElement/Ext.Element</code><div class="sub-desc">The new node or Element</div></li> |
</ul> |
</div> |
</div> |
</div> |
</td> |
<td class="msource"><a ext:cls="Ext.Template" ext:member="#insertFirst" href="output/Ext.Template.html#insertFirst">Template</a></td> |
</tr> |
<tr class="method-row inherited alt expandable"> |
<td class="micon"><a class="exi" href="#expand"> </a></td> |
<td class="sig"> |
<a id="Ext.XTemplate-overwrite"></a> |
<b>overwrite</b>( <code>Mixed el</code>, <code>Object/Array values</code>, <span class="optional" title="Optional">[<code>Boolean returnElement</code>]</span> ) : HTMLElement/Ext.Element <div class="mdesc"> |
<div class="short">Applies the supplied values to the template and overwrites the content of el with the new node(s).</div> |
<div class="long"> |
Applies the supplied values to the template and overwrites the content of el with the new node(s). <div class="mdetail-params"> |
<strong>Parameters:</strong> |
<ul><li><code>el</code> : Mixed<div class="sub-desc">The context element</div></li><li><code>values</code> : Object/Array<div class="sub-desc">The template values. Can be an array if your params are numeric (i.e. {0}) or an object (i.e. {foo: 'bar'})</div></li><li><code>returnElement</code> : Boolean<div class="sub-desc">(optional) true to return a Ext.Element (defaults to undefined)</div></li> </ul> |
<strong>Returns:</strong> |
<ul> |
<li><code>HTMLElement/Ext.Element</code><div class="sub-desc">The new node or Element</div></li> |
</ul> |
</div> |
</div> |
</div> |
</td> |
<td class="msource"><a ext:cls="Ext.Template" ext:member="#overwrite" href="output/Ext.Template.html#overwrite">Template</a></td> |
</tr> |
</table> |
<a id="Ext.XTemplate-events"></a> |
<h2>Public Events</h2> |
<div class="no-members">This class has no public events.</div> |
</div> |