Yahoo! UI Library: TreeViewの基本(その1)

Ajax(XHR)の方も一通り感触がつかめたので、YUITreeViewに移動。

TreeViewは、メニューやエクスプローラー風のUIを作るのによい材料なので、基本からやってみる。
なので、TreeViewのトップページにある例からはじめる。

YUIのTreeViewでは、rootになるdivを指定して、その中にul,ol,liなどのリスト形式のタグを記述すれば、自動的に開閉自由のTreeを形成してくれる。Treeのノードを表現するテキストには、liタグで記述されたテキストや、aタグで記述されたアンカーのテキストが設定される。

一番最初の例では、bodyの中に以下のようなdivを用意して、それを自動的にTreeにしてしまうというもの。YAHOO.widget.TreeViewのインスタンスを生成して、draw(render)するだけでよい。

<div id="treeDiv1">
    <ul>
	<li>List 0
		<ul>
		    <li>List 0-0
			<ul>
		            <li>item 0-0-0</li>
			    <li>item 0-0-1</li>
			</ul>
		    </li>
		</ul>
	</li>
	<li>item 0-1
		<ul>
		    <li><a target="_new" href="http://www.google.co.jp" 
                                                           title="google">Google</a>
			<ul>
			    <li>item 0-1-0</li>
			    <li>item 0-1-1</li>
			</ul>
		    </li>
		</ul>
	</li>
    </ul>
</div>

これを元に作成したTreeViewは以下のようになる。

以下は、上のTreeを展開した時の画面。

以下にJavascriptを含むHTMLの全文を示す。
簡単にTreeが書けることがわかる。

<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>Ajax_Sampling</TITLE>
<style type="text/css">
body {
	margin:0;
	padding:0;
}
</style>
<link rel="stylesheet" type="text/css" href="scripts/yui/fonts/fonts-min.css" />
<link rel="stylesheet" type="text/css" href="scripts/yui/treeview/assets/skins/sam/treeview.css" />

<style type="text/css" id="defaultstyle">
#container {
	margin: 2px;
	padding: 3px;
	width: 300px;
	height: auto;
	border:1px dashed #999999;
}
#treeDiv1 {
	background: #fff; 
	padding:1em;
}
</style>

<!-- 読み込むjs --> 
<script type="text/javascript" src="scripts/yui/yahoo-dom-event/yahoo-dom-event.js" >
</script> 
<script type="text/javascript" src="scripts/yui/treeview/treeview-min.js" >
</script>
<script type="text/javascript" src="scripts/yui/utilities/utilities.js" >
</script> 

<script type="text/javascript">
//モジュールパターンで実装する。
YAHOO.namespace("EGP");

YAHOO.EGP.BasicTree = function() {
	var tree;

    var buildTextNodeTree = function() {
	
	//treeのインスタンス化
        tree = new YAHOO.widget.TreeView("treeDiv1");          

	//Treeの描画
        tree.draw();
    };
	
    return{
    	init: function() {
        	buildTextNodeTree();
    	}
    };
    
}();

//DOMが完全にloadされたら、サンプルを初期化する。
YAHOO.util.Event.onDOMReady(
	//DomReadyイベントで発火するハンドラ
	YAHOO.EGP.BasicTree.init,
	//ハンドラに渡すオブジェクト(関数)
	YAHOO.EGP.BasicTree,
	//ハンドラは、上記のオブジェクトのスコープをもつ。   
	true
);
</script>
</HEAD>

<!-- class=" yui-skin-sam"の指定が必要 -->
<BODY class=" yui-skin-sam">
<div id="container">
<p>
HTMLで記述されたdiv,ul,li,から生成されるTreeです。<br/>
テキストノードは、テキスト、aタグで書かれています。
</p>
<div id="treeDiv1">
	<ul>
		<li>List 0
			<ul>
				<li>List 0-0
					<ul>
						<li>item 0-0-0</li>
						<li>item 0-0-1</li>
					</ul>
				</li>
			</ul>
		</li>
		<li>item 0-1
			<ul>
				<li><a target="_new" href="http://www.google.co.jp" title="google">Google</a>
					<ul>
						<li>item 0-1-0</li>
						<li>item 0-1-1</li>
					</ul>
				</li>
			</ul>
		</li>
	</ul>
</div>
</div>
</BODY>
</HTML>