<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ExtJSで楽しくRIA業務アプリ開発 &#187; Ext.XTeplate</title>
	<atom:link href="http://extjs.blog.sus4.co.jp/tag/ext-xteplate/feed/" rel="self" type="application/rss+xml" />
	<link>http://extjs.blog.sus4.co.jp</link>
	<description>株式会社sus4 開発チーム</description>
	<lastBuildDate>Wed, 01 Jun 2011 09:32:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ExtJS入門　Ext.XTemplateの補足</title>
		<link>http://extjs.blog.sus4.co.jp/2010/02/26/491/</link>
		<comments>http://extjs.blog.sus4.co.jp/2010/02/26/491/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 02:10:36 +0000</pubDate>
		<dc:creator>佐竹 裕行</dc:creator>
				<category><![CDATA[ExtJSチュートリアルｓｕｓ４版]]></category>
		<category><![CDATA[ExtJS勉強会＠名古屋資料]]></category>
		<category><![CDATA[Ext.XTeplate]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[サンプル]]></category>
		<category><![CDATA[チュートリアル]]></category>
		<category><![CDATA[勉強会]]></category>

		<guid isPermaLink="false">http://extjs.blog.sus4.co.jp/?p=491</guid>
		<description><![CDATA[Ext.XTemplateの補足というか真髄の機能にテンプレート内でforやifによる制御ができる点です。

Ext.XTempalteでは、テンプレートにセットするデータの値によって処理を分岐したり、配列の値をループで取り出すことができます。]]></description>
			<content:encoded><![CDATA[<p>Ext.XTemplateの補足というか真髄の機能にテンプレート内でforやifによる制御ができる点です。</p>
<p>Ext.XTempalteでは、テンプレートにセットするデータの値によって処理を分岐したり、配列の値をループで取り出すことができます。<br />
サンプルではダミーのデータ(data)をオブジェクトで用意して、その内容に対してテンプレート側で制御をしながらHTMLを構築しています。</p>
<p><span id="more-491"></span></p>
<p><strong>・HTML</strong></p>
<pre class="brush: html; ">

&lt;html&gt;
&lt;head&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
    &lt;title&gt;ExtJS名古屋勉強会　xtemplateの使い方(for,ifを使う)&lt;/title&gt; 

    &lt;!--Ext JS CSS--&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;../js/ext/resources/css/ext-all.css&quot; type=&quot;text/css&quot; /&gt;
    &lt;!--Ext JS--&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;../js/ext/adapter/ext/ext-base.js&quot;&gt;&lt;/script&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;../js/ext/ext-all.js&quot;&gt;&lt;/script&gt;
    &lt;!--my App JS--&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;xtemplate2.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1 style=&quot;background-color:#BDD3EF;&quot;&gt;for,ifを使ったXTemplate&lt;/h1&gt;
    &lt;div id=&quot;js-tpl&quot;&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt; 
</pre>
<p><strong>・Javascript</strong></p>
<pre class="brush: js; ">

Ext.onReady(function(){

    //ダミーのデータ
    var data = {
        name:&#039;株式会社sus4&#039;,
        url:&#039;http://www.sus4.co.jp&#039;,
        //この配列をループで読み出す
        array:[
            {key:&#039;C&#039;,value:&#039;Major&#039;},
            {key:&#039;D&#039;,value:&#039;Minor&#039;},
            {key:&#039;E&#039;,value:&#039;7&#039;},
            {key:&#039;F&#039;,value:&#039;Minor7&#039;},
            {key:&#039;G&#039;,value:&#039;dim&#039;},
            {key:&#039;A&#039;,value:&#039;aug&#039;},
            {key:&#039;B&#039;,value:&#039;add&#039;}
        ]
    };

    /**
     * テンプレート
     * (HTMLに描いたテンプレートではうまく動作しない。)
     */
    var jsTpl = new Ext.XTemplate(
        //ここは普通に{}でセットする
        &#039;&lt;a href=&quot;{url}&quot;&gt;{name}&lt;/a&gt;&#039;,
        &#039;&lt;table&gt;&#039;,
            &#039;&lt;tpl for=&quot;array&quot;&gt;&#039;,
                &#039;&lt;tr&gt;&#039;,
                    //数字と比較
                    &#039;&lt;tpl if=&quot;value == 7&quot;&gt;&#039;,
                        &#039;&lt;th&gt;{key}&lt;/th&gt;&#039;,
                        &#039;&lt;td style=&quot;color:red;&quot;&gt;&lt;b&gt;{value}&lt;/b&gt;&lt;/td&gt;&#039;,
                    &#039;&lt;/tpl&gt;&#039;,
                    //文字列と比較。比較する文字列をエスケープ下シングルクォートで囲む
                    &#039;&lt;tpl if=&quot;key == \&#039;C\&#039;&quot;&gt;&#039;,
                        &#039;&lt;th style=&quot;color:orange;&quot;&gt;&lt;b&gt;{key}&lt;/b&gt;&lt;/th&gt;&#039;,
                        &#039;&lt;td&gt;{value}&lt;/td&gt;&#039;,
                    &#039;&lt;/tpl&gt;&#039;,
                    //elseの代わりのif分岐

                    &#039;&lt;tpl if=&quot;key != \&#039;C\&#039; &amp;amp;&amp;amp; value != 7&quot;&gt;&#039;,
                        &#039;&lt;th&gt;{key}&lt;/th&gt;&#039;,
                        &#039;&lt;td&gt;{value}&lt;/td&gt;&#039;,
                    &#039;&lt;/tpl&gt;&#039;,
                &#039;&lt;/tr&gt;&#039;,
            &#039;&lt;/tpl&gt;&#039;,
        &#039;&lt;/table&gt;&#039;
    );

    //JSに描いたテンプレートを使用
    var jsTplHtml = jsTpl.apply(data);
    new Ext.Panel({
		renderTo:&#039;js-tpl&#039;,
        title:&#039;XTemplateパネル(for,ifを使用中)&#039;,
        bodyStyle:&#039;padding:20px;&#039;,
        html:jsTplHtml
    });

});
</pre>
<p><strong>・実行結果</strong><br />
<div id="attachment_492" class="wp-caption aligncenter" style="width: 310px"><a href="http://extjs.blog.sus4.co.jp/files/2010/02/SS-2010.02.26-11.04.32.png" title="XTemplate for/if" rel="lightbox[491]"><img src="http://extjs.blog.sus4.co.jp/files/2010/02/SS-2010.02.26-11.04.32-300x225.png" alt="XTemplate for/if" title="XTemplate for/if" width="300" height="225" class="size-medium wp-image-492" /></a><p class="wp-caption-text">XTemplate for/if</p></div></p>
<p>ダミーのデータはオブジェクトです。このデータのarrayプロパティに配列がセットされています。この配列をテンプレートのループで取り出して、HTML構築しさらに各値によってスタイルを設定するようにします。</p>
<p>テンプレートの記述はJavascript側で行っています。<tpl>～</tpl>までが一つの制御のくくりになります。</p>
<pre class="brush: html; ">

ループを展開する
&lt;tpl for=&quot;.&quot;&gt;
    &lt;p&gt;{some_value}&lt;/p&gt;
&lt;/tpl&gt;

ifで分岐する
&lt;tpl if=&quot;some_value &gt; 0&quot;&gt;
    &lt;p&gt;{some_value}&lt;/p&gt;
&lt;/tpl&gt;
</pre>
<p>という形でテンプレートに制御を記述します。制御の詳しいルールはAPIドキュメントに詳しく書かれています。<br />
いくつかポイントを挙げておきますと</p>
<p><strong>&#038;&#038;,||ももちろん使える。</strong></p>
<pre class="brush: html; ">

ループを展開する
&lt;tpl if=&quot;some_value &gt; 10 &amp;amp;&amp;amp; some_value &lt; 100&quot;&gt;
    &lt;p&gt;{some_value}&lt;/p&gt;
&lt;/tpl&gt;
</pre>
<p><strong>ifでの文字列比較が特殊</strong><br />
テンプレートのif分で文字列の比較を行う場合は文字列にバックスラッシュとシングルクウォートで括る必要があります。</p>
<pre class="brush: html; ">

&lt;tpl if=&quot;some_value== \&#039;比較する文字列\&#039;&quot;&gt;
	シングルクウォートで括る。
&lt;/tpl&gt;
</pre>
<p><strong>elseはかけない</strong><br />
elseがかけない為、ifの否定で制御する。例えば</p>
<pre class="brush: html; ">

&lt;tpl if =&quot;some_value  == 10&quot;&gt;
	一つの条件で分岐
&lt;/tpl&gt;
&lt;tpl if=&quot;some_value != 10&quot;&gt;
	elseの代わり
&lt;tpl&gt;
</pre>
<p><strong>html側に書いたテンプレートでは動かないことがある。</strong><br />
ExtJSのバージョンにもよるのかもしれませんが、HTMLに書いたforやifを含むテンプレートはExt.XTemplate.fromで読み込んだ場合上手く動作しないことがあります。<br />
Javascript側に書いた場合は、特に問題が起きませんでした。将来的に改善されるかもしれませんが、現状ではforやifを含むテンプレートはJavascript内で記述して new Ext.XTemplate()で読み込むようにします。</p>
<p>このようにテンプレート側だけで簡単な操作は可能になります。サンプルのように任意の項目のCSSを書き換えるような処理はテンプレートで行うとスマートです。</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fextjs.blog.sus4.co.jp%2F2010%2F02%2F26%2F491%2F&amp;linkname=ExtJS%E5%85%A5%E9%96%80%E3%80%80Ext.XTemplate%E3%81%AE%E8%A3%9C%E8%B6%B3"><img src="http://extjs.blog.sus4.co.jp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://extjs.blog.sus4.co.jp/2010/02/26/491/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

