<?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; ビジネスExtJS</title>
	<atom:link href="http://extjs.blog.sus4.co.jp/tag/%e3%83%93%e3%82%b8%e3%83%8d%e3%82%b9extjs/feed/" rel="self" type="application/rss+xml" />
	<link>http://extjs.blog.sus4.co.jp</link>
	<description>株式会社sus4 開発チーム</description>
	<lastBuildDate>Wed, 01 Sep 2010 02:15:15 +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入門24　エディタブル・グリッドの基本(グリッドパネルをエディタブル・グリッドに変更)</title>
		<link>http://extjs.blog.sus4.co.jp/2010/04/23/extjs-tutorial24-editorgrid-basic/</link>
		<comments>http://extjs.blog.sus4.co.jp/2010/04/23/extjs-tutorial24-editorgrid-basic/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 02:38:54 +0000</pubDate>
		<dc:creator>佐竹 裕行</dc:creator>
				<category><![CDATA[ExtJSチュートリアルｓｕｓ４版]]></category>
		<category><![CDATA[ExtJS勉強会＠名古屋資料]]></category>
		<category><![CDATA[Ext.grid.EditorGridPanel]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JsonStore]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[TextField]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[エディタブル・グリッド]]></category>
		<category><![CDATA[エディター]]></category>
		<category><![CDATA[サンプル]]></category>
		<category><![CDATA[チュートリアル]]></category>
		<category><![CDATA[ビジネスExtJS]]></category>
		<category><![CDATA[業務ウェブアプリケーションTips]]></category>

		<guid isPermaLink="false">http://extjs.blog.sus4.co.jp/?p=556</guid>
		<description><![CDATA[今回はエディタブル・グリッド(エディター・グリッド)の紹介です。エディタブルとエディターはどっちの方が正しいのかわかりませんが。クラス名はエディター･グリッドなのですが、ここではエディタブル・グリッドで統一します。
エディタブル・グリッドはグリッドの内容をグリッド上で直接編集する機能です。一般的にはカラムのダブルクリックで編集することが多いと思います。今回は以前紹介したグリッドへの追加と削除をベースにエディタブル・グリッドに変更します。
ExtJS　フォームの基本とExtJS入門23を先にご覧下さい。

ExtJS入門　ExtJSのフォームについて（基本編）
ExtJS入門23　グリッドへの項目の追加と削除

グリッドパネル関連の過去の記事はこちらからです。

ExtJSで楽しくRIA業務アプリ開発 ExJS入門17　グリッド・パネル　基本編
ExtJSで楽しくRIA業務アプリ開発 ExtJS入門18　グリッド　レンダラーを使ってデザインを変える
ExtJS入門19　グリッドにページング機能を追加する
ExtJS入門20　グリッドにフィルタリング機能を追加する
ExJS入門21　グリッド・セレクション・モデル
ExJS入門22　グリッドのイベント処理（ダブルクリック、右クリック）

リファレンスはこちらから
ExtJS -3.0 日本語APIドキュメント &#8211; Ext.grid.EditorGridPanelクラス
http://extdocs.xenophy.com/?class=Ext.grid.EditorGridPanel

HTML:


&#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Strict//EN&#34; &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&#34;&#62;
&#60;html&#62;
&#60;head&#62;
    &#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=utf-8&#34; /&#62;
    &#60;title&#62;ExtJS名古屋勉強会　エディタブル・グリッド&#60;/title&#62;

    &#60;!--Ext JS CSS--&#62;
    &#60;link rel=&#34;stylesheet&#34; href=&#34;../js/ext/resources/css/ext-all.css&#34; type=&#34;text/css&#34; /&#62;
    &#60;!--Ext JS--&#62;
    &#60;script type=&#34;text/javascript&#34; src=&#34;../js/ext/adapter/ext/ext-base.js&#34;&#62;&#60;/script&#62;

    &#60;script [...]]]></description>
			<content:encoded><![CDATA[<p>今回はエディタブル・グリッド(エディター・グリッド)の紹介です。エディタブルとエディターはどっちの方が正しいのかわかりませんが。クラス名はエディター･グリッドなのですが、ここではエディタブル・グリッドで統一します。<br />
エディタブル・グリッドはグリッドの内容をグリッド上で直接編集する機能です。一般的にはカラムのダブルクリックで編集することが多いと思います。今回は以前紹介したグリッドへの追加と削除をベースにエディタブル・グリッドに変更します。<br />
<div id="attachment_557" class="wp-caption aligncenter" style="width: 160px"><a href="http://extjs.blog.sus4.co.jp/files/2010/04/SS-2010.04.23-11.20.56.png" title="エディタブル･グリッド" rel="lightbox[556]"><img src="http://extjs.blog.sus4.co.jp/files/2010/04/SS-2010.04.23-11.20.56-150x150.png" alt="エディタブル･グリッド" title="エディタブル･グリッド" width="150" height="150" class="size-thumbnail wp-image-557" /></a><p class="wp-caption-text">エディタブル･グリッド</p></div></p>
<p>ExtJS　フォームの基本とExtJS入門23を先にご覧下さい。</p>
<ul>
<li><a href="http://extjs.blog.sus4.co.jp/2010/04/22/extjs-tutorial-form-baseic/">ExtJS入門　ExtJSのフォームについて（基本編）</a></li>
<li><a href="http://extjs.blog.sus4.co.jp/2010/04/20/extjs-tutorial23-gridadd/">ExtJS入門23　グリッドへの項目の追加と削除</a></li>
</ul>
<p>グリッドパネル関連の過去の記事はこちらからです。</p>
<ul>
<li><a href="http://extjs.blog.sus4.co.jp/2010/02/03/extjs-tutorial17-gridbasic/">ExtJSで楽しくRIA業務アプリ開発 ExJS入門17　グリッド・パネル　基本編</a></li>
<li><a href="http://extjs.blog.sus4.co.jp/2010/02/05/extjs-tutorial18-gridrenderer/">ExtJSで楽しくRIA業務アプリ開発 ExtJS入門18　グリッド　レンダラーを使ってデザインを変える</a></li>
<li><a href="http://extjs.blog.sus4.co.jp/2010/04/14/extjs-tutorial19-gridpaging/">ExtJS入門19　グリッドにページング機能を追加する</a></li>
<li><a href="http://extjs.blog.sus4.co.jp/2010/04/15/extjs-tutorial20-grid-filter/">ExtJS入門20　グリッドにフィルタリング機能を追加する</a></li>
<li><a href="http://extjs.blog.sus4.co.jp/2010/04/16/extjs-tutorial21-gridselmodel/">ExJS入門21　グリッド・セレクション・モデル</a></li>
<li><a href="http://extjs.blog.sus4.co.jp/2010/04/19/extjs-tutorial-gridclick/">ExJS入門22　グリッドのイベント処理（ダブルクリック、右クリック）</a></li>
</ul>
<p>リファレンスはこちらから<br />
ExtJS -3.0 日本語APIドキュメント &#8211; Ext.grid.EditorGridPanelクラス<br />
<a target="_blank" href="http://extdocs.xenophy.com/?class=Ext.grid.EditorGridPanel">http://extdocs.xenophy.com/?class=Ext.grid.EditorGridPanel</a></p>
<p><span id="more-556"></span></p>
<p><strong>HTML:</strong></p>
<pre class="brush: html; ">

&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&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名古屋勉強会　エディタブル・グリッド&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;script type=&quot;text/javascript&quot; src=&quot;editorgrid-basic.js&quot;&gt;&lt;/script&gt;
    &lt;style TYPE=&quot;text/css&quot;&gt;
    &lt;!--
        .add {background-image: url(../img/icon/add.png) !important;}
        .delete {background-image: url(../img/icon/delete.png) !important;}
    --&gt;
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div style=&quot;width:500px;margin:0 auto;padding:15px;background-color:#D3E1F1;font-size:small;&quot;&gt;
        &lt;p style=&quot;font-weight:bold;padding:3px;margin-bottom:10px;&quot;&gt;
        エディタブル・グリッドで項目を追加・変更します。
        &lt;/p&gt;

        &lt;div id=&quot;grid&quot;&gt;&lt;/div&gt;
        &lt;br/&gt;
        Java Script：&lt;a href=&quot;editorgrid-basic.js&quot;&gt;editorgrid-basic.js&lt;/a&gt;&lt;br/&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong>Java Script:</strong></p>
<pre class="brush: js; ">

//グリッドへの追加削除
Ext.onReady(function()
{
    var grid = new Ext.grid.EditorGridPanel({
        renderTo:&#039;grid&#039;,
        title:&#039;エディタブル・グリッド 追加と削除が可能&#039;,
        height:210,
        width:400,

        //カラムモデル
        cm:new Ext.grid.ColumnModel([
            {
                id:&#039;title&#039;,
                header:&#039;項目名&#039;,
                dataIndex:&#039;title&#039;,
                width:100,
                editor:{    //カラムのエディタを指定
                    xtype:&#039;textfield&#039;,
                    emptyText:&#039;入力してください。&#039;
                },
                renderer:function(v){   //カラムのデータが空のとき表示
                    return v ? v : &#039;ダブルクリックで編集&#039;;
                }
            }
        ]),

        //セレクションモデル
        sm:new Ext.grid.RowSelectionModel({
            singleSelect:true
        }),

        //ストア
        store:new Ext.data.JsonStore({
            fields:[&#039;title&#039;]
        }),

        //GridViewのコンフィグを設定
        viewConfig:{
            deferEmptyText:false,
            emptyText:&#039;グリッド項目はありません&#039;,
            forceFit:true
        },

        tbar:[
            {
                text:&#039;追加&#039;,
                iconCls:&#039;add&#039;,
                handler:function(btn){  //グリッドに項目を追加する処理
                    //編集中の場合は編集をやめる
                    grid.stopEditing();
                    var data = {};

                    var RecordType = grid.getStore().recordType;
                    var newItem = new RecordType(data);
                    grid.getStore().insert(0,newItem);
                }
            },
            {
                text:&#039;削除&#039;,
                iconCls:&#039;delete&#039;,
                handler:function(btn){  //選択したレコードを削除する処理

                    //編集中の場合は編集をやめる
                    grid.stopEditing();

                    //1.選択されている項目を取得
                    var record = grid.selModel.getSelected();

                    if (record) {
                        //2.recordをremoveでストアから取り除く
                        grid.getStore().remove(record);
                    }
                }
            }
        ]
    });
});
</pre>
<p><strong>実行結果:</strong><br />
<div id="attachment_557" class="wp-caption aligncenter" style="width: 310px"><a href="http://extjs.blog.sus4.co.jp/files/2010/04/SS-2010.04.23-11.20.56.png" title="エディタブル･グリッド" rel="lightbox[556]"><img src="http://extjs.blog.sus4.co.jp/files/2010/04/SS-2010.04.23-11.20.56-300x173.png" alt="エディタブル･グリッド" title="エディタブル･グリッド" width="300" height="173" class="size-medium wp-image-557" /></a><p class="wp-caption-text">エディタブル･グリッド</p></div></p>
<p>基本的には<a target="_blank" href="http://extjs.blog.sus4.co.jp/2010/04/20/extjs-tutorial23-gridadd/">ExtJS入門23　グリッドへの項目の追加と削除</a>を基本にエディタブル・グリッドに変更します。<br />
Ext.grid.EditorGridクラスはExt.grid.GridPanelクラスのサブクラスであり、ほとんどのグリッドパネルの基本的なコンフィグがエディタブルグリッドに適応できます。そのため今回もExtJS入門23のグリッドパネルのコンフィグがほぼそのまま使えます。<br />
変更箇所はクラスをExt.grid.GridPanelからExt.grid.EditorGridPanelといくつかの編集のカラムの設定になります。<br />
クラスの変更は単純に書き換えるだけです。</p>
<p>つぎに編集時のエディタを設定します。前回のフォームの基本を踏まえて、今回はtextfieldで編集させます。もちろんDateFieldなどより高機能なエディタも設定できます。</p>
<pre class="brush: js; ">

//カラムモデル
cm:new Ext.grid.ColumnModel([
	{
		id:&#039;title&#039;,
		header:&#039;項目名&#039;,
		dataIndex:&#039;title&#039;,
		width:100,
		editor:{    //カラムのエディタを指定
			xtype:&#039;textfield&#039;,
			emptyText:&#039;入力してください。&#039;
		},
		renderer:function(v){   //カラムのデータが空のとき表示
			return v ? v : &#039;ダブルクリックで編集&#039;;
		}
	}
])
</pre>
<p>さらにここではrendererで空の状態でのグリッドの表示を設定しています。エディタに設定されているemptyTextはエディタが起動しているときだけしか表示されません。セルが空の場合に任意にテキストを表示したい場合は、サンプルのようにカラムのレンダラーで設定します。</p>
<p>またエディタを起動中に項目の追加・削除を行った場合少し気持ち悪い挙動をします。それはエディタが起動中にも関わらず、別の場所からストアが変更されているためです。これを避けるには、別の場所で編集が始まったらグリッドパネルの編集をとめる必要があります。編集をとめるにはEditorGridPanelクラスのstopEditiong()メソッドを実行します。tbarのボタンのハンドラー内で実行しています。</p>
<pre class="brush: js; ">

tbar:[
	{
		text:&#039;追加&#039;,
		iconCls:&#039;add&#039;,
		handler:function(btn){  //グリッドに項目を追加する処理
			//編集中の場合は編集をやめる
			grid.stopEditing();
			var data = {};

			var RecordType = grid.getStore().recordType;
			var newItem = new RecordType(data);
			grid.getStore().insert(0,newItem);
		}
	}
]
</pre>
<p>グリッドからエディタブル・グリッドへの変更はこれだけで終了です。グリッドさえ分かっていれば簡単ですね。エディットされた内容はストアに保存されています。</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%2F04%2F23%2Fextjs-tutorial24-editorgrid-basic%2F&amp;linkname=ExtJS%E5%85%A5%E9%96%8024%E3%80%80%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%83%96%E3%83%AB%E3%83%BB%E3%82%B0%E3%83%AA%E3%83%83%E3%83%89%E3%81%AE%E5%9F%BA%E6%9C%AC%28%E3%82%B0%E3%83%AA%E3%83%83%E3%83%89%E3%83%91%E3%83%8D%E3%83%AB%E3%82%92%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%83%96%E3%83%AB%E3%83%BB%E3%82%B0%E3%83%AA%E3%83%83%E3%83%89%E3%81%AB%E5%A4%89%E6%9B%B4%29"><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/04/23/extjs-tutorial24-editorgrid-basic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ExJS入門21　グリッド・セレクション・モデル</title>
		<link>http://extjs.blog.sus4.co.jp/2010/04/16/extjs-tutorial21-gridselmodel/</link>
		<comments>http://extjs.blog.sus4.co.jp/2010/04/16/extjs-tutorial21-gridselmodel/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 02:45:07 +0000</pubDate>
		<dc:creator>佐竹 裕行</dc:creator>
				<category><![CDATA[ExtJSチュートリアルｓｕｓ４版]]></category>
		<category><![CDATA[ExtJS勉強会＠名古屋資料]]></category>
		<category><![CDATA[Ext.XTemplate]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[GridPanel]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[JsonStore]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Store]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[サンプル]]></category>
		<category><![CDATA[チュートリアル]]></category>
		<category><![CDATA[ビジネスExtJS]]></category>
		<category><![CDATA[業務ウェブアプリケーションTips]]></category>

		<guid isPermaLink="false">http://extjs.blog.sus4.co.jp/?p=520</guid>
		<description><![CDATA[グリッド関連4回目は、セレクションモデルを設定して、行の選択状態を取得する簡単なサンプルです。
ExtJSのグリッドの様々なセレクションモデルを設定して、行の選択の仕方を指定します。今回は一番基本となる、単一の行を選択するセレクションモデルを設定して、その行の情報を取り出すようにします。]]></description>
			<content:encoded><![CDATA[<p>グリッド関連4回目は、セレクションモデルを設定して、行の選択状態を取得する簡単なサンプルです。<br />
ExtJSのグリッドの様々なセレクションモデルを設定して、行の選択の仕方を指定します。今回は一番基本となる、単一の行を選択するセレクションモデルを設定して、その行の情報を取り出すようにします。以前に紹介したグリッドのサンプルではセレクションモデルが明示的に設定されていないためグリッドのデフォルトのセレクションモデルが自動的に設定されていました。実際に試してもらうと分かりやすいのですが、Ctrlもしくはcommandキーを押しながらクリックすると複数選択ができます。<br />
今回のサンプルではセレクションモデルを独自に設定して、一行だけを選択するようにします。<br />
<div id="attachment_524" class="wp-caption aligncenter" style="width: 160px"><a href="http://extjs.blog.sus4.co.jp/files/2010/04/SS-2010.04.16-11.43.06.png" title="セレクションモデル" rel="lightbox[520]"><img src="http://extjs.blog.sus4.co.jp/files/2010/04/SS-2010.04.16-11.43.06-150x150.png" alt="セレクションモデル" title="セレクションモデル" width="150" height="150" class="size-thumbnail wp-image-524" /></a><p class="wp-caption-text">セレクションモデル</p></div></p>
<p><span id="more-520"></span></p>
<p>グリッドパネルについてはこちらもご覧下さい。</p>
<ul>
<li><a href="http://extjs.blog.sus4.co.jp/2010/02/03/extjs-tutorial17-gridbasic/">ExtJSで楽しくRIA業務アプリ開発 ExJS入門17　グリッド・パネル　基本編</a></li>
<li><a href="http://extjs.blog.sus4.co.jp/2010/02/05/extjs-tutorial18-gridrenderer/">ExtJSで楽しくRIA業務アプリ開発 ExtJS入門18　グリッド　レンダラーを使ってデザインを変える</a></li>
<li><a href="http://extjs.blog.sus4.co.jp/2010/04/14/extjs-tutorial19-gridpaging/">ExtJS入門19　グリッドにページング機能を追加する</a></li>
<li><a href="http://extjs.blog.sus4.co.jp/2010/04/15/extjs-tutorial20-grid-filter/">ExtJS入門20　グリッドにフィルタリング機能を追加する</a></li>
</ul>
<p>リファレンスはこちらから<br />
ExtJS -3.0 日本語APIドキュメント &#8211; Ext.grid.RowSelectionModelクラス<br />
<a target="_blank" href="http://extdocs.xenophy.com/?class=Ext.grid.RowSelectionModel">http://extdocs.xenophy.com/?class=Ext.grid.RowSelectionModel</a></p>
<p><!--more--></p>
<p><strong>PHP:</strong></p>
<pre class="brush: html; ">

&lt;?php
    $limit = $_POST[&#039;limit&#039;];
    $start = $_POST[&#039;start&#039;];

    $name = $_POST[&#039;name&#039;];

    //全データ
    $data = array(
        array(
            &#039;id&#039;=&gt;1,
            &#039;rank&#039;=&gt;1,
            &#039;name&#039;=&gt;&#039;IE&#039;,
            &#039;percentage&#039;=&gt;62.69,
            &#039;url&#039; =&gt; &#039;http://www.microsoft.com/japan/windows/products/winfamily/ie/default.mspx&#039;,
            &#039;img&#039; =&gt; &#039;../img/ie64.png&#039;
        ),
        array(
            &#039;id&#039;=&gt;2,
            &#039;rank&#039;=&gt;2,
            &#039;name&#039;=&gt;&#039;Firefox&#039;,
            &#039;percentage&#039;=&gt;24.61,
            &#039;url&#039; =&gt;&#039;http://mozilla.jp/firefox/&#039;,
            &#039;img&#039; =&gt; &#039;../img/firefox64.png&#039;
        ),
        array(
            &#039;id&#039;=&gt;3,
            &#039;rank&#039;=&gt;3,
            &#039;name&#039;=&gt;&#039;Chrome&#039;,
            &#039;percentage&#039;=&gt;4.63,
            &#039;url&#039; =&gt; &#039;www.google.com/chrome/&#039;,
            &#039;img&#039; =&gt; &#039;../img/chrome64.png&#039;
        ),
        array(
            &#039;id&#039;=&gt;4,
            &#039;rank&#039;=&gt;4,
            &#039;name&#039;=&gt;&#039;Safari&#039;,
            &#039;percentage&#039;=&gt;4.46,
            &#039;url&#039;=&gt; &#039;http://www.apple.com/jp/safari/&#039;,
            &#039;img&#039; =&gt; &#039;../img/safari64.png&#039;
        ),
        array(
            &#039;id&#039;=&gt;5,
            &#039;rank&#039;=&gt;5,
            &#039;name&#039;=&gt;&#039;Opera&#039;,
            &#039;percentage&#039;=&gt;2.40,
            &#039;url&#039; =&gt; &#039;http://jp.opera.com/&#039;,
            &#039;img&#039; =&gt; &#039;../img/opera64.png&#039;
        ),
        array(
            &#039;id&#039;=&gt;6,
            &#039;rank&#039;=&gt;6,
            &#039;name&#039;=&gt;&#039;Opera Mini&#039;,
            &#039;percentage&#039;=&gt;0.53,
            &#039;url&#039; =&gt; &#039;http://jp.opera.com/&#039;,
            &#039;img&#039; =&gt; &#039;../img/opera64.png&#039;
        )
    );

    if ($name) {
        $newData = array();
        foreach($data as $val){
            if(stristr($val[&#039;name&#039;],$name)) {
                $newData[] = $val;
            }
        }
        $data = $newData;
    }

    if ($limit &amp;&amp; $start + $limit &lt;= count($data)) {
        //ページング用
        $rows = array_slice($data,$start,$limit);
    }else {
        //ページングしない
        $rows = $data;
    }

    $res = array(
        &#039;success&#039; =&gt; true,
        &#039;total&#039; =&gt; 6,
        &#039;rows&#039; =&gt; $rows
    );

    header(&quot;Content-Type: text/javascript; charset=utf-8&quot;);
    echo json_encode($res);

    die();
</pre>
<p><strong>HTML:</strong></p>
<pre class="brush: html; ">

&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&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名古屋勉強会　Selection&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;script type=&quot;text/javascript&quot; src=&quot;grid-selection.js&quot;&gt;&lt;/script&gt;
    &lt;style TYPE=&quot;text/css&quot;&gt;
    &lt;!--
        .tick {background-image: url(../img/icon/tick.png) !important;}
    --&gt;
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div style=&quot;width:500px;margin:0 auto;padding:15px;background-color:#D3E1F1;font-size:small;&quot;&gt;
        &lt;p style=&quot;font-weight:bold;padding:3px;margin-bottom:10px;&quot;&gt;
            行のセレクト情報を取得します。
        &lt;/p&gt;

        &lt;div id=&quot;grid&quot;&gt;&lt;/div&gt;
        &lt;br/&gt;
        Java Script：&lt;a href=&quot;grid-selection.js&quot;&gt;grid-selection.js&lt;/a&gt;&lt;br/&gt;
        PHP(JSONデータ)：&lt;a href=&quot;data.php&quot;&gt;data.php&lt;/a&gt;&lt;br /&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong>Java Script:</strong></p>
<pre class="brush: js; ">

//フィルターグリッド
Ext.onReady(function()
{
    //1.データを用意
    //今回はPHPでdata.phpでJSONを返しています。

    //2.データストアを用意
    var store = new Ext.data.JsonStore({
        url:&#039;data.php&#039;,
        root:&#039;rows&#039;,            //実際のデータ位置（プロパティ名）
        totalProperty:&#039;total&#039;,  //全件数を返すプロパティ名を指定
        fields:[
            {name:&#039;id&#039;},
            {name:&#039;rank&#039;},
            {name:&#039;name&#039;},
            {name:&#039;percentage&#039;,type:&#039;float&#039;},
            {name:&#039;url&#039;,type:&#039;url&#039;},
            {name:&#039;img&#039;,type:&#039;url&#039;},
        ],
        autoLoad:true           //描写後に自動的に初回のリクエストをかける
    });

    //3.SelModelの設定
    //今回は一度に一つの行しか選択できないようにしている。
    var sm = new Ext.grid.RowSelectionModel({
        singleSelect:true
    });

    //4.カラムモデルを用意
    var column = new Ext.grid.ColumnModel([
        {
            id:&#039;rank&#039;,
            header:&#039;順位&#039;,
            dataIndex:&#039;rank&#039;,
            width:50
        },
        {
            id:&#039;name&#039;,
            header:&#039;ブラウザ名&#039;,
            dataIndex:&#039;name&#039;,
            width:100
        },
        {
            id:&#039;percentage&#039;,
            header:&#039;シェア&#039;,
            dataIndex:&#039;percentage&#039;,
            width:80
        },
        {
            id:&#039;id&#039;,
            header:&#039;ID&#039;,
            dataIndex:&#039;id&#039;,
            width:20
        }
    ]);

    //5.グリッドパネルの作成
    var grid = new Ext.grid.GridPanel({
        renderTo:&#039;grid&#039;,
        id:&#039;my-grid&#039;,
        autoExpandColumn:&#039;name&#039;,
        title:&#039;SingleSelectのグリッドパネル&#039;,
        height:210,
        width:400,
        cm:column,
        sm:sm,
        store:store,
        tbar:[
            {
                text:&#039;選択中のブラウザ情報&#039;,
                iconCls:&#039;tick&#039;,
                handler:function(btn){
                    var record = grid.selModel.getSelected();
                    var msg;
                    if (!record) {
                        msg = &#039;ブラウザが選択されていません&#039;;
                    }else{
                        msg = new Ext.XTemplate(
                            &#039;&lt;div style=&quot;width:200px; text-align:center;&quot;&gt;&#039;,
                            &#039;ブラウザ名：{name}&lt;br/&gt;&#039;,
                            &#039;順位：{rank}&lt;br/&gt;&#039;,
                            &#039;シェア：{percentage}%&lt;br /&gt;&#039;,
                            &#039;&lt;a href=&quot;{url}&quot; target=&quot;_blank&quot;&gt;DOWNLOAD&lt;/a&gt;&lt;br/&gt;&#039;,
                            &#039;&lt;img src=&quot;{img}&quot; /&gt;&#039;,
                            &#039;&lt;/div&gt;&#039;).apply(record.data);
                    }

                    Ext.Msg.alert(&#039;選択中のブラウザ&#039;,msg);
                }
            }
        ]
    });
});
</pre>
<p><strong>実行結果:</strong><br />
<div id="attachment_524" class="wp-caption aligncenter" style="width: 545px"><a href="http://extjs.blog.sus4.co.jp/files/2010/04/SS-2010.04.16-11.43.06.png" title="セレクションモデル" rel="lightbox[520]"><img src="http://extjs.blog.sus4.co.jp/files/2010/04/SS-2010.04.16-11.43.06.png" alt="セレクションモデル" title="セレクションモデル" width="535" height="468" class="size-full wp-image-524" /></a><p class="wp-caption-text">セレクションモデル</p></div></p>
<p>今回はRowSelectionModelクラスを使っています。RowSelectionModelクラスのコンフィグオプションのsingleSelectをTrueに設定するだけで、グリッドの一行のみを選択するようになります。これをGridPanelのselModelコンフィグに設定します。コンフィグsmはselModelの省略形です。</p>
<p>次に選択した行のデータの取り出しです。選択した行の状態を把握しているのは対象のグリッドに設定されているセレクションモデルになります。選択行の情報の取出しにはまずセレクションモデルを取得します。またRowSelectionModelではgetSelected()メソッドで選択行のレコードが取得できるため以下のようになります。</p>
<pre class="brush: js; ">

var record = grid.selModel.getSelected();
</pre>
<p>これで選択行のレコードが取得できました。recordはストアにある全データの中の1組データのまとまりです。storeクラスのfieldsで設定したデータの1組を保持しています。今回は単純にデータを取り出すだけですので,record.dataと直接データを取得しています。<br />
詳しくはExt.data.Recordクラスを参照してください。recordについてはEditorGridのサンプルの際に詳しく説明します。</p>
<p>これで1行を選択することができ、選択された一行のデータの取得方法が分かりました。今回はこの選択行の取得をtbarに設置したボタンで起動します。</p>
<p>GridPanelのtbarにはボタンやフィールドなどが置かれます。前回のフィルタリングではテキストフィールドをせっちしました。ここではボタンを設置して選択行の情報をポップアップで開くようにします。<br />
tbarの基本的な設定は以下のようになります。iconClsはボタンにアイコンを設定します。iconClsはCSSのスタイルで指定します。今回はHTMLの中に記述しています。<br />
handlerに処理を記述します。ボタンが押された後にここでグリッドの情報を取得してアラートを表示します。</p>
<pre class="brush: js; ">

 tbar:[
	{
		text:&#039;ボタンの表示名&#039;,
		iconCls:&#039;tick&#039;,
		handler:function(btn){
			//ボタンの処理
		}
	}
]
</pre>
<p>グリッドパネルのセレクションモデルには様々な選択方式があります。色々と試してみるとよいかもしれません。</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%2F04%2F16%2Fextjs-tutorial21-gridselmodel%2F&amp;linkname=ExJS%E5%85%A5%E9%96%8021%E3%80%80%E3%82%B0%E3%83%AA%E3%83%83%E3%83%89%E3%83%BB%E3%82%BB%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%BB%E3%83%A2%E3%83%87%E3%83%AB"><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/04/16/extjs-tutorial21-gridselmodel/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>第5回ExtJS勉強会＠名古屋 2/25　パネル内のエレメントを作成する</title>
		<link>http://extjs.blog.sus4.co.jp/2010/01/28/extjs-tutorial-summary3/</link>
		<comments>http://extjs.blog.sus4.co.jp/2010/01/28/extjs-tutorial-summary3/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 02:48:13 +0000</pubDate>
		<dc:creator>佐竹 裕行</dc:creator>
				<category><![CDATA[ExtJSチュートリアルｓｕｓ４版]]></category>
		<category><![CDATA[ExtJS勉強会＠名古屋資料]]></category>
		<category><![CDATA[未分類]]></category>
		<category><![CDATA[チュートリアル]]></category>
		<category><![CDATA[ビジネスExtJS]]></category>
		<category><![CDATA[勉強会]]></category>
		<category><![CDATA[勉強会まとめ]]></category>

		<guid isPermaLink="false">http://extjs.blog.sus4.co.jp/?p=414</guid>
		<description><![CDATA[第4回ExtJS勉強会＠名古屋のチュートリアルセクション用の資料用のまとめです。
前回までのセッションでパネルを作るところまで行きました。今回はそのパネルの中に表示するHTML要素を生成するためのクラスを中心に扱います。クラスとしては以下の3つが中心になります。
Ext.XTemplateではHTMLをテンプレートと記述して、パネルに設定します。
Ext.DomHelperではDOMの追加や削除を行います。
Ext.DataView,ListViewはストアの内容をパネルに配置する簡単な方法を紹介します。
前回までのセッションのまとめはこちらです。
第2回ExtJS勉強会＠名古屋 勉強会Ext.onReadyからはじめるExtJSのまとめ
第3回ExtJS勉強会＠名古屋 11/27　Ext.Panelからはじめるコンポーネントの基礎

各チュートリアル記事へのリンク
・ExtJS入門10　Ext.XTemplateを使う
http://extjs.blog.sus4.co.jp/2009/12/03/extjs-tutorial10/
・ExtJS入門11 Ext.XtemplateでJS内のテンプレートを使う
http://extjs.blog.sus4.co.jp/2009/12/04/extjs-tutorial11/
・ExtJS入門13 Ext.DomHelperの使い方
http://extjs.blog.sus4.co.jp/2010/01/14/extjs-tutorial13-domhelper1/
・ExtJS入門14　DomHelperの使い方2
http://extjs.blog.sus4.co.jp/2010/01/14/extjs-tutorial14-domhelper2/
・ExtJS入門14　DomHelperの使い方3　
http://extjs.blog.sus4.co.jp/2010/02/25/extjs-domhelper-insert-remove/
・ExtJS入門15 DataViewの使い方
http://extjs.blog.sus4.co.jp/2010/01/26/extjs-tutrorial15/
・ExtJS入門16 ListViewの使い方
http://extjs.blog.sus4.co.jp/2010/01/27/extjs-tutorial16/
]]></description>
			<content:encoded><![CDATA[<p>第4回ExtJS勉強会＠名古屋のチュートリアルセクション用の資料用のまとめです。<br />
前回までのセッションでパネルを作るところまで行きました。今回はそのパネルの中に表示するHTML要素を生成するためのクラスを中心に扱います。クラスとしては以下の3つが中心になります。</p>
<p>Ext.XTemplateではHTMLをテンプレートと記述して、パネルに設定します。<br />
Ext.DomHelperではDOMの追加や削除を行います。<br />
Ext.DataView,ListViewはストアの内容をパネルに配置する簡単な方法を紹介します。</p>
<p>前回までのセッションのまとめはこちらです。</p>
<p><a target="_blank" href="http://extjs.blog.sus4.co.jp/2009/10/29/%E5%8B%89%E5%BC%B7%E4%BC%9Aext-onready%E3%81%8B%E3%82%89%E3%81%AF%E3%81%98%E3%82%81%E3%82%8Bextjs%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81/">第2回ExtJS勉強会＠名古屋 勉強会Ext.onReadyからはじめるExtJSのまとめ</a></p>
<p><a target="_blank" href="http://extjs.blog.sus4.co.jp/2009/11/27/extjs-studysession2/">第3回ExtJS勉強会＠名古屋 11/27　Ext.Panelからはじめるコンポーネントの基礎<br />
</a></p>
<p><strong>各チュートリアル記事へのリンク</strong></p>
<p>・ExtJS入門10　Ext.XTemplateを使う<br />
<a target="_blank" href="http://extjs.blog.sus4.co.jp/2009/12/03/extjs-tutorial10/">http://extjs.blog.sus4.co.jp/2009/12/03/extjs-tutorial10/</a></p>
<p>・ExtJS入門11 Ext.XtemplateでJS内のテンプレートを使う<br />
<a target="_blank" href="http://extjs.blog.sus4.co.jp/2009/12/04/extjs-tutorial11/">http://extjs.blog.sus4.co.jp/2009/12/04/extjs-tutorial11/</a></p>
<p>・ExtJS入門13 Ext.DomHelperの使い方<br />
<a target="_blank" href="http://extjs.blog.sus4.co.jp/2010/01/14/extjs-tutorial13-domhelper1/">http://extjs.blog.sus4.co.jp/2010/01/14/extjs-tutorial13-domhelper1/</a></p>
<p>・ExtJS入門14　DomHelperの使い方2<br />
<a target="_blank" href="http://extjs.blog.sus4.co.jp/2010/01/14/extjs-tutorial14-domhelper2/">http://extjs.blog.sus4.co.jp/2010/01/14/extjs-tutorial14-domhelper2/</a></p>
<p>・ExtJS入門14　DomHelperの使い方3　<br />
<a href="http://extjs.blog.sus4.co.jp/2010/02/25/extjs-domhelper-insert-remove/">http://extjs.blog.sus4.co.jp/2010/02/25/extjs-domhelper-insert-remove/</a></p>
<p>・ExtJS入門15 DataViewの使い方<br />
<a target="_blank" href="http://extjs.blog.sus4.co.jp/2010/01/26/extjs-tutrorial15/">http://extjs.blog.sus4.co.jp/2010/01/26/extjs-tutrorial15/</a></p>
<p>・ExtJS入門16 ListViewの使い方<br />
<a target="_blank" href="http://extjs.blog.sus4.co.jp/2010/01/27/extjs-tutorial16/">http://extjs.blog.sus4.co.jp/2010/01/27/extjs-tutorial16/</a></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%2F01%2F28%2Fextjs-tutorial-summary3%2F&amp;linkname=%E7%AC%AC5%E5%9B%9EExtJS%E5%8B%89%E5%BC%B7%E4%BC%9A%EF%BC%A0%E5%90%8D%E5%8F%A4%E5%B1%8B%202%2F25%E3%80%80%E3%83%91%E3%83%8D%E3%83%AB%E5%86%85%E3%81%AE%E3%82%A8%E3%83%AC%E3%83%A1%E3%83%B3%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B"><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/01/28/extjs-tutorial-summary3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>第4回ExtJS勉強会＠名古屋（2010年1月）を開催します</title>
		<link>http://extjs.blog.sus4.co.jp/2010/01/12/%e7%ac%ac4%e5%9b%9eextjs%e5%8b%89%e5%bc%b7%e4%bc%9a%ef%bc%a0%e5%90%8d%e5%8f%a4%e5%b1%8b%ef%bc%882010%e5%b9%b41%e6%9c%88%ef%bc%89%e3%82%92%e9%96%8b%e5%82%ac%e3%81%97%e3%81%be%e3%81%99/</link>
		<comments>http://extjs.blog.sus4.co.jp/2010/01/12/%e7%ac%ac4%e5%9b%9eextjs%e5%8b%89%e5%bc%b7%e4%bc%9a%ef%bc%a0%e5%90%8d%e5%8f%a4%e5%b1%8b%ef%bc%882010%e5%b9%b41%e6%9c%88%ef%bc%89%e3%82%92%e9%96%8b%e5%82%ac%e3%81%97%e3%81%be%e3%81%99/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 15:40:43 +0000</pubDate>
		<dc:creator>野村 亮之</dc:creator>
				<category><![CDATA[ExtJS勉強会＠名古屋のお知らせ]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[お知らせ]]></category>
		<category><![CDATA[ビジネスExtJS]]></category>
		<category><![CDATA[勉強会]]></category>

		<guid isPermaLink="false">http://extjs.blog.sus4.co.jp/?p=369</guid>
		<description><![CDATA[ExtJSユーザーの皆様、あけましておめでとうございます。
2009年12月は、名古屋の勉強会を開催しませんでしたので、2ヶ月間あいてしまいましたが、2010年1月28日（木）に第4回ExtJS名古屋勉強会を開催します。
今回は、株式会社ニューキャストさんのご好意により、セミナールームを借りて開催することになりました。]]></description>
			<content:encoded><![CDATA[<p style="margin-top: 8px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; padding: 0px;">ExtJSユーザーの皆様、あけましておめでとうございます。<br style="font-size: 10px; line-height: 10px;" />2009年12月は、名古屋の勉強会を開催しませんでしたので、2ヶ月間あいてしまいましたが、2010年1月28日（木）に第4回ExtJS名古屋勉強会を開催します。<br style="font-size: 10px; line-height: 10px;" />今回は、株式会社ニューキャストさんのご好意により、セミナールームを借りて開催することになりました。</p>
<p style="margin-top: 8px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; padding: 0px;">ExtJS3.1もリリースされ、ますます注目度が増すExtJSを名古屋から盛り上げて行きましょう。</p>
<p style="margin-top: 8px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; padding: 0px;">詳細情報については、<a href="http://extjs.co.jp/blog/2010/01/12/ext-study-nagoya-4/">ExtJSウェブサイト</a>をご覧下さい。</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%2F01%2F12%2F%25e7%25ac%25ac4%25e5%259b%259eextjs%25e5%258b%2589%25e5%25bc%25b7%25e4%25bc%259a%25ef%25bc%25a0%25e5%2590%258d%25e5%258f%25a4%25e5%25b1%258b%25ef%25bc%25882010%25e5%25b9%25b41%25e6%259c%2588%25ef%25bc%2589%25e3%2582%2592%25e9%2596%258b%25e5%2582%25ac%25e3%2581%2597%25e3%2581%25be%25e3%2581%2599%2F&amp;linkname=%E7%AC%AC4%E5%9B%9EExtJS%E5%8B%89%E5%BC%B7%E4%BC%9A%EF%BC%A0%E5%90%8D%E5%8F%A4%E5%B1%8B%EF%BC%882010%E5%B9%B41%E6%9C%88%EF%BC%89%E3%82%92%E9%96%8B%E5%82%AC%E3%81%97%E3%81%BE%E3%81%99"><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/01/12/%e7%ac%ac4%e5%9b%9eextjs%e5%8b%89%e5%bc%b7%e4%bc%9a%ef%bc%a0%e5%90%8d%e5%8f%a4%e5%b1%8b%ef%bc%882010%e5%b9%b41%e6%9c%88%ef%bc%89%e3%82%92%e9%96%8b%e5%82%ac%e3%81%97%e3%81%be%e3%81%99/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ExtJS入門11 Ext.XtemplateでJS内のテンプレートを使う</title>
		<link>http://extjs.blog.sus4.co.jp/2009/12/04/extjs-tutorial11/</link>
		<comments>http://extjs.blog.sus4.co.jp/2009/12/04/extjs-tutorial11/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 03:05:28 +0000</pubDate>
		<dc:creator>佐竹 裕行</dc:creator>
				<category><![CDATA[ExtJSチュートリアルｓｕｓ４版]]></category>
		<category><![CDATA[ExtJS勉強会＠名古屋資料]]></category>
		<category><![CDATA[未分類]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[サンプル]]></category>
		<category><![CDATA[チュートリアル]]></category>
		<category><![CDATA[ビジネスExtJS]]></category>
		<category><![CDATA[勉強会]]></category>

		<guid isPermaLink="false">http://extjs.blog.sus4.co.jp/?p=321</guid>
		<description><![CDATA[前回はExt.XTemplateクラスのfromメソッドでHTML内のファイルをテンプレートに使いましたが、今回はJavascriptのファイル内にテンプレートを書く方法を紹介します。]]></description>
			<content:encoded><![CDATA[<p>前回はExt.XTemplateクラスのfromメソッドでHTML内のファイルをテンプレートに使いましたが、今回はJavascriptのファイル内にテンプレートを書く方法を紹介します。</p>
<p>前回の記事<br />
<a href="http://extjs.blog.sus4.co.jp/2009/12/03/extjs-tutorial10/" >ExtJS入門10　Ext.XTemplateを使う</a></p>
<p>Ext.XTemplateクラス – Ext 3.0 – API Documentation 日本語版<br />
<a href="http://extdocs.xenophy.com/?class=Ext.XTemplate">http://extdocs.xenophy.com/?class=Ext.XTemplate</a></p>
<p>・HTML</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の使い方(Javascript内のテンプレート)&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;xtemplate-new.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1 style=&quot;background-color:#BDD3EF;&quot;&gt;JS内のテンプレートを使ったXTempalte&lt;/h1&gt;
	&lt;div id=&quot;tpl-target&quot;&gt;
	&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>・Javascript</p>
<pre class="brush: js; ">

Ext.onReady(function(){
    var data = {
        name:&#039;株式会社sus4&#039;,
        url:&#039;http://www.sus4.co.jp&#039;,
    };

    /**
     * テンプレート
     * 中括弧でdataオブジェクトのプロパティ名を指定する。
     * js内の文字列でテンプレートを指定する場合は,
     * new Ext.XTemplate(テンプレート文字列)とする。newしないとエラーになります。
     * カンマで区切ることで複数行に渡ってテンプレート文字列を書くことができます。
     * 最後にカンマがつくとエラーになります。
     */
    var tpl = new Ext.XTemplate(
        &#039;&lt;h2&gt;リンクを作る&lt;/h2&gt;&#039;,
        &#039;&lt;a href=&quot;{url}&quot;&gt;{name}&lt;/a&gt;&#039;,
        &#039;&lt;h2&gt;テーブルを作る&lt;/h2&gt;&#039;,
        &#039;&lt;table&gt;&#039;,
        &#039;&lt;tr&gt;&#039;,
            &#039;&lt;th style=&quot;padding:3px;&quot;&gt;{name}:&lt;/th&gt;&lt;td&gt;{url}&lt;/td&gt;&#039;,
        &#039;&lt;/tr&gt;&#039;,
        &#039;&lt;/table&gt;&#039;
    );

    //htmlファイルに作った要素のIDを指定
    var tplHtml = tpl.apply(data);
    var panel = new Ext.Panel({
		renderTo:&#039;tpl-target&#039;,
        title:&#039;テンプレートを使ったパネル&#039;,
        bodyStyle:&#039;padding:20px&#039;,
        html:tplHtml
    });
});
</pre>
<p>・実行結果<br />
<div id="attachment_323" class="wp-caption aligncenter" style="width: 310px"><a href="http://extjs.blog.sus4.co.jp/files/2009/12/SS-2009.12.04-11.55.26.png" title="Ext.XTemplateでJS内にテンプレートを書く" rel="lightbox[321]"><img src="http://extjs.blog.sus4.co.jp/files/2009/12/SS-2009.12.04-11.55.26-300x196.png" alt="Ext.XTemplateでJS内にテンプレートを書く" title="Ext.XTemplateでJS内にテンプレートを書く" width="300" height="196" class="size-medium wp-image-323" /></a><p class="wp-caption-text">Ext.XTemplateでJS内にテンプレートを書く</p></div></p>
<p>Ext.XTemplateのテンプレートはJavascript内に記述しています。</p>
<pre class="brush: js; ">

var tpl = new Ext.XTemplate(
        &#039;&lt;h2&gt;リンクを作る&lt;/h2&gt;&#039;,
        &#039;&lt;a href=&quot;{url}&quot;&gt;{name}&lt;/a&gt;&#039;,
        &#039;&lt;h2&gt;テーブルを作る&lt;/h2&gt;&#039;,
        &#039;&lt;table&gt;&#039;,
        &#039;&lt;tr&gt;&#039;,
            &#039;&lt;th style=&quot;padding:3px;&quot;&gt;{name}:&lt;/th&gt;&lt;td&gt;{url}&lt;/td&gt;&#039;,
        &#039;&lt;/tr&gt;&#039;,
        &#039;&lt;/table&gt;&#039;
    );
</pre>
<p>文字列でテンプレートとなるHTMLを記述しています。テンプレート文字列が長くなって改行する場合は一旦文字列を区切って「,」(カンマ)で新しい文字列を連結して書いていきます。<br />
例：</p>
<pre class="brush: js; ">

new Ext.XTemplate(
　　　&#039;文字列&#039;,
　　　’文字列’
);
</pre>
<p>文字列を区切らずそのまま改行するとエラーになります。連結した最後の文字列のあとにカンマがついてもダメです。<br />
データの設定する箇所は「{}」(中括弧)でデータオブジェクトのプロパティ名を指定します。<br />
HTMLファイルにテンプレートを記述する、Ext.XTemplate.from()ではnewしていませんでしたが、JSファイル内に文字列としてテンプレートを記述して使う場合はnewしなければいけません。Ext.XTemaplate.from()メソッドを使うとHTMLに描いた文字列からテンプレートオブジェクトを生成して返しているためnewしなくても良かったのですが、今回は自分できちんとnewして文字列からテンプレートオブジェクトを生成します。</p>
<p>あとはExt.XTemplate.fromと同じようにapplyでデータの設定して、パネルの要素に設定しています。</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fextjs.blog.sus4.co.jp%2F2009%2F12%2F04%2Fextjs-tutorial11%2F&amp;linkname=ExtJS%E5%85%A5%E9%96%8011%20Ext.Xtemplate%E3%81%A7JS%E5%86%85%E3%81%AE%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%92%E4%BD%BF%E3%81%86"><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/2009/12/04/extjs-tutorial11/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ExtJSのことを話す上での基礎用語について &#8211; Part1</title>
		<link>http://extjs.blog.sus4.co.jp/2009/10/17/extjs%e3%81%ae%e3%81%93%e3%81%a8%e3%82%92%e8%a9%b1%e3%81%99%e4%b8%8a%e3%81%a7%e3%81%ae%e5%9f%ba%e7%a4%8e%e7%94%a8%e8%aa%9e%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6-part1/</link>
		<comments>http://extjs.blog.sus4.co.jp/2009/10/17/extjs%e3%81%ae%e3%81%93%e3%81%a8%e3%82%92%e8%a9%b1%e3%81%99%e4%b8%8a%e3%81%a7%e3%81%ae%e5%9f%ba%e7%a4%8e%e7%94%a8%e8%aa%9e%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6-part1/#comments</comments>
		<pubDate>Sat, 17 Oct 2009 12:01:30 +0000</pubDate>
		<dc:creator>野村 亮之</dc:creator>
				<category><![CDATA[ExtJS営業向け知識集]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[チュートリアル]]></category>
		<category><![CDATA[ビジネスExtJS]]></category>
		<category><![CDATA[営業向け]]></category>

		<guid isPermaLink="false">http://extjs.blog.sus4.co.jp/?p=40</guid>
		<description><![CDATA[ExtJSを話題にするうえで、覚えておくべきいくつかの知識があります。
技術者対営業、営業対エンドユーザー、技術者対エンドユーザーなど、ビジネスを進めていく上でいろいろな場面が考えられるとおもいますが、共通の言葉を作っておくと話が早い場合もあります。]]></description>
			<content:encoded><![CDATA[<p>ExtJSを話題にするうえで、覚えておくべきいくつかの知識があります。<br />
技術者対営業、営業対エンドユーザー、技術者対エンドユーザーなど、ビジネスを進めていく上でいろいろな場面が考えられるとおもいますが、共通の言葉を作っておくと話が早い場合もあります。</p>
<p>今回は、まとめて紹介していきます。<br />
どちらかというと、営業向けの言葉説明なので、技術者には物足りない内容かもしれないです。</p>
<h2>1.RIA</h2>
<p>リッチインターネットアプリケーション。3年か4年前から盛んに言われるようになって来た言葉です。それまでのHTMLベースのウェブアプリケーションに対して、よりネイティブアプリケーションっぽい動きをするWebアプリケーションの総称でよいと思います。<br />
このRIAを実現する技術としては、Flash、FlexなどのFlashプラグインを利用するアプリケーション、Sliverlightプラグインを利用するアプリケーションと、Ajaxを利用するJavaScriptベースのアプリケーションが代表的なものとなります。<br />
ウェブ上で、リッチな体験を提供するというのが言葉の中に含まれる定義ですね。</p>
<p>僕が業務系RIAを説明するときは、今まで当たり前にできていた業務をウェブアプリに置き換えても、当たり前に同じことができることですと伝えます。</p>
<h2>2.Ajax</h2>
<p>先ほどの説明に出てきましたが、Ajaxというのは、JavaScriptに関しての言葉です。<br />
Wikiの説明ですと</p>
<blockquote><p><strong>Ajax</strong>（エイジャックス、アジャックス）は、ウェブブラウザ内で非同期通信とインターフェイスの構築などを行う技術の総称。<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="XMLHttpRequest" href="http://ja.wikipedia.org/wiki/XMLHttpRequest">XMLHttpRequest</a>（<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="Hypertext Transfer Protocol" href="http://ja.wikipedia.org/wiki/Hypertext_Transfer_Protocol">HTTP</a>通信を行うための<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="JavaScript" href="http://ja.wikipedia.org/wiki/JavaScript">JavaScript</a>組み込み<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="クラス (コンピュータ)" href="http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%A9%E3%82%B9_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)">クラス</a>）による非同期通信を利用し、通信結果に応じて<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="ダイナミックHTML" href="http://ja.wikipedia.org/wiki/%E3%83%80%E3%82%A4%E3%83%8A%E3%83%9F%E3%83%83%E3%82%AFHTML">ダイナミックHTML</a>で動的にページの一部を書き換えるというアプローチを取る。</p></blockquote>
<p>という感じになります。<br />
今までのHTMLベースのウェブアプリケーションは、情報を送信するのに、ページ全体を書き換える必要がありましたが、このAjax技術を使うと、ページ内でいつでもサーバへの通信が可能で、ページ内の一部を動的に変更することができます。<br />
これが、ネイティブアプリケーションっぽくウェブアプリケーションを振舞わせることができる核の技術です。</p>
<h2>3.ライブラリとフレームワーク</h2>
<p>前にお話をしているときに、フレームワークとライブラリの違いってなんですかと聞かれたことがあるので、、、</p>
<p>Wikiによるフレームワークの説明：</p>
<blockquote><p><strong>Web アプリケーションフレームワーク</strong>（<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="英語" href="http://ja.wikipedia.org/wiki/%E8%8B%B1%E8%AA%9E">英</a>: <strong>Web Application Framework</strong>）は、動的な <a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="ウェブサイト" href="http://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B5%E3%82%A4%E3%83%88">ウェブサイト</a>、<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="Webアプリケーション" href="http://ja.wikipedia.org/wiki/Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3">Webアプリケーション</a>、<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="Webサービス" href="http://ja.wikipedia.org/wiki/Web%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9">Webサービス</a>の<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="Webプログラミング" href="http://ja.wikipedia.org/wiki/Web%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0">開発</a>をサポートするために設計された<a style="text-decoration: none; color: #5a3696; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="アプリケーションフレームワーク" href="http://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF">アプリケーションフレームワーク</a>である。 フレームワークの目的は、Web 開発で用いられる共通した作業に伴う労力を軽減することである。たとえば、多数のフレームワークが<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="データベース" href="http://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9">データベース</a>へのアクセスのためのライブラリや、<a style="text-decoration: none; color: #cc2200; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="テンプレーティング (未作成ページ)" href="http://ja.wikipedia.org/w/index.php?title=%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0&amp;action=edit&amp;redlink=1">テンプレーティング</a> フレームワーク、<a style="text-decoration: none; color: #3366bb; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="en:session (computer science)" href="http://en.wikipedia.org/wiki/session_(computer_science)">セッション</a>管理を提供し、<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="コードの再利用" href="http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%86%8D%E5%88%A9%E7%94%A8">コードの再利用</a>を促進させるものもある。</p></blockquote>
<p>Wikiによるライブラリの説明：</p>
<blockquote><p><strong>ライブラリ</strong>は、汎用性の高い複数の<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="プログラム (コンピュータ)" href="http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)">プログラム</a>を、再利用可能な形でひとまとまりにしたものである。一般にライブラリは、それ単体では<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="プログラム (コンピュータ)" href="http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)">プログラム</a>として動作させることはできないので<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="実行ファイル" href="http://ja.wikipedia.org/wiki/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB">実行ファイル</a>ではない。ライブラリは他のプログラムに何らかの機能を提供するコードの集まりと言うことができる。<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="ソースコード" href="http://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89">ソースコード</a>の場合と、<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="オブジェクトファイル" href="http://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB">オブジェクトコード</a>、あるいは専用の形式を用いる場合とがある。たとえば、<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="UNIX" href="http://ja.wikipedia.org/wiki/UNIX">UNIX</a>のライブラリはオブジェクトコードをarと呼ばれる<a style="text-decoration: none; color: #002bb8; background-image: none; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; background-position: initial initial;" title="アーカイバ" href="http://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%BC%E3%82%AB%E3%82%A4%E3%83%90">アーカイバ</a>でひとまとめにして利用する。</p></blockquote>
<p>んー、これだとなかなかわかりにくいですね。</p>
<p>近年登場してきているJavaScriptを快適に書くためのライブラリ・フレームワークを上げてみると、</p>
<ul>
<li>Prototypeは、昔JavaScriptライブラリといわれていたような気がしたのですが、いつの間にかフレームワークになっています。</li>
<li>jQueryは、WikiではJavaScriptライブラリといわれていますね。</li>
<li>ちょっと毛色が違いますが、YUIはUIライブラリといっていますね。</li>
<li>Dojoは最近、Core, digit, DojoXに分かれてるみたいですね。3つあわせると、フレームワークとよばれるっぽいですね。</li>
</ul>
<p>どちらかというと、スクリプトを書くときにサポートしてくれる機能が寄り集まったものをライブラリといい、アプリケーション自体をそれで完結できるもの（JavaScriptの場合は、クライアントサイドのコード全体をまかなえると考えれば適当かもしれません）をフレームワークといっているようです。</p>
<p>ちょうど、ExtJSでいうと、ExtCoreに関しては、ライブラリといったほうがよさそうで、ExtJSはフレームワークといえそうですね。</p>
<p>なんだかまとまりのない感じになってしまいましたが、とりあえず簡単に3つ紹介してみました。次回は、JavaScriptに関する言葉をもう少し解説していきます。</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fextjs.blog.sus4.co.jp%2F2009%2F10%2F17%2Fextjs%25e3%2581%25ae%25e3%2581%2593%25e3%2581%25a8%25e3%2582%2592%25e8%25a9%25b1%25e3%2581%2599%25e4%25b8%258a%25e3%2581%25a7%25e3%2581%25ae%25e5%259f%25ba%25e7%25a4%258e%25e7%2594%25a8%25e8%25aa%259e%25e3%2581%25ab%25e3%2581%25a4%25e3%2581%2584%25e3%2581%25a6-part1%2F&amp;linkname=ExtJS%E3%81%AE%E3%81%93%E3%81%A8%E3%82%92%E8%A9%B1%E3%81%99%E4%B8%8A%E3%81%A7%E3%81%AE%E5%9F%BA%E7%A4%8E%E7%94%A8%E8%AA%9E%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%20%26%238211%3B%20Part1"><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/2009/10/17/extjs%e3%81%ae%e3%81%93%e3%81%a8%e3%82%92%e8%a9%b1%e3%81%99%e4%b8%8a%e3%81%a7%e3%81%ae%e5%9f%ba%e7%a4%8e%e7%94%a8%e8%aa%9e%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6-part1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
