DataTable Control: Conditional row coloring
このExampleでは、Row Format(行のフォーマット)をカスタム・フォーマッターとして作成する。
先の例のカスタム・フォーマッターが、テーブルのエレメント(td)を修飾するものであったのに対して、Rowフォーマッターは、行そのもの(tr)を修飾するものである。
Rowフォーマッターの使用は、DataTableのインスタンス生成時に指定すればよい。
サンプルでは、Quantityが40未満の行について、行の色を変えるフォーマッターを作成している(下)が、これは、
- 各行についてQuantityをチェックする。
- Quantityが40未満だったら、trにmarkというclassを作成する。
- markには、あらかじめ、色の違うスタイルを用意しておく。
というやり方で実行される。
以下にJavascriptを含むHTMLの全文をしめす。
scriptはモジュール・パターンに書き直した。
<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/datatable/assets/skins/sam/datatable.css" /> <script type="text/javascript" src="scripts/yui/yahoo-dom-event/yahoo-dom-event.js"></script> <script type="text/javascript" src="scripts/yui/element/element-beta-min.js"></script> <script type="text/javascript" src="scripts/yui/datasource/datasource-min.js"></script> <script type="text/javascript" src="scripts/yui/datatable/datatable-min.js"></script> <style type="text/css" id="defaultstyle"> #main { margin: 2px; padding: 3px; /* width: 560px; height: auto; border:1px dashed #999999;*/ } /* Remove row striping, column borders, and sort highlighting */ /* .yui-dt-odd .yui-dt-ascは自動的に付与されるclass*/ .yui-skin-sam tr.yui-dt-odd, .yui-skin-sam tr.yui-dt-odd td.yui-dt-asc, .yui-skin-sam tr.yui-dt-odd td.yui-dt-desc, .yui-skin-sam tr.yui-dt-even td.yui-dt-asc, .yui-skin-sam tr.yui-dt-even td.yui-dt-desc { background-color: #fff; } /* Tableの下線だけ出す。 */ .yui-skin-sam .yui-dt tbody td { border-bottom: 1px solid #ddd; } /* Tableの下線だけ出す。 */ .yui-skin-sam .yui-dt thead th { border-bottom: 1px solid #7f7f7f; } /* Tableの縦線をなくす。 */ .yui-skin-sam .yui-dt tr.yui-dt-last td, .yui-skin-sam .yui-dt th, .yui-skin-sam .yui-dt td { border: none; } /* マークのついた行のための定義(Rowフォーマッターでは、trにclassが追加される) */ /* .yui-dt-odd .yui-dt-ascは自動的に付与されるclass*/ .yui-skin-sam .yui-dt tr.mark, .yui-skin-sam .yui-dt tr.mark td.yui-dt-asc, .yui-skin-sam .yui-dt tr.mark td.yui-dt-desc, .yui-skin-sam .yui-dt tr.mark td.yui-dt-asc, .yui-skin-sam .yui-dt tr.mark td.yui-dt-desc { background-color: #a33; color: #fff; } </style> <!-- データテーブルの読み込み --> <!-- YAHOO.example.Data = { inventory: [ {SKU:"23-23874", Quantity:43, Item:"Helmet", Description:"Red baseball helmet. Size: Large."}, {SKU:"48-38835", Quantity:84, Item:"Football", Description:"Leather football."}, {SKU:"84-84848", Quantity:31, Item:"Goggles", Description:"Light blue swim goggles"}, {SKU:"84-84843", Quantity:56, Item:"Badminton Set", Description:"Set of 2 badminton rackets, net, and 3 birdies."}, {SKU:"84-39321", Quantity:128, Item:"Tennis Balls", Description:"Canister of 3 tennis balls."}, {SKU:"39-48949", Quantity:55, Item:"Snowboard", Description:""}, {SKU:"99-28128", Quantity:77, Item:"Cleats", Description:"Soccer cleats. Size: 10."}, {SKU:"83-48281", Quantity:65, Item:"Volleyball", Description:""}, {SKU:"89-32811", Quantity:12, Item:"Sweatband", Description:"Blue sweatband. Size: Medium."}, {SKU:"28-22847", Quantity:43, Item:"Golf Set", Description:"Set of 9 golf clubs and bag."}, {SKU:"38-38281", Quantity:1, Item:"Basketball Shorts", Description:"Green basketball shorts. Size: Small."}, {SKU:"82-38333", Quantity:288, Item:"Lip balm", Description:"Lip balm. Flavor: Cherry."}, {SKU:"21-38485", Quantity:177, Item:"Ping Pong Ball", Description:""}, {SKU:"83-38285", Quantity:87, Item:"Hockey Puck", Description:"Glow-in-the-dark hockey puck."} ], } --> <script type="text/javascript" src="scripts/yui/datatable/assets/js/data.js"></script> <script type="text/javascript"> YAHOO.namespace("EGP"); YAHOO.EGP.DataTable = function() { // Create a shortcut var Dom = YAHOO.util.Dom; // カスタム・Rowフォーマッター(カスタム・フォーマッターとは引数が違う) var myRowFormatter = function(elTr, oRecord) { if (oRecord.getData('Quantity') < 40) { Dom.addClass(elTr, 'mark'); } return true; }; var dataSource, dataTable; return{ init: function() { // データソースの作成 dataSource = new YAHOO.util.DataSource(YAHOO.example.Data.inventory); dataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY; dataSource.responseSchema = { fields : ['SKU','Quantity','Item','Description'] }; // データテーブルの作成 dataTable = new YAHOO.widget.DataTable('tbl', [ {key:'SKU',sortable: true}, {key:'Item',sortable: true}, {key:'Quantity',sortable: true}, {key:'Description',sortable: true} ], dataSource, // Row Formatterを使えるようにする。 // APIドキュメント http://developer.yahoo.com/yui/docs/YAHOO.widget.DataTable.html // のConfiguration Attributesを参照のこと。 {formatRow: myRowFormatter} ); }, // おまじない oDS: dataSource, oDT: dataTable }; }(); //DOMが完全にloadされたら、サンプルを初期化する。 YAHOO.util.Event.onDOMReady( //DomReadyイベントで発火するハンドラ YAHOO.EGP.DataTable.init, //ハンドラに渡すオブジェクト(関数) YAHOO.EGP.DataTable, //ハンドラは、上記のオブジェクトのスコープをもつ。 true ); </script> </HEAD> <BODY class="yui-skin-sam"> <div id="main"> <p> row formatter作成のサンプルです。 </p> <div class="demo"> <div id="tbl"></div> </div> </div> </BODY> </HTML>