2024
11
23
2010
11
12
google.visualization.Table もどきを作る。
google.visualization.Table は、HTML文書でテーブルを表示する時に、とても便利なツールです。今回は、google.visualization.Table に似せたコンストラクタを作成してみましょう。そうすることで、Google Visualization の世界が少しはわかるかもしれません。
Table コンストラクタの書式
table=new neta.vis.Table(container)
引数は、コンボボックスを配置する先の HTML 要素です。TABLE要素を生成します。実際に内容を配置するには draw メソッドを実行します。
draw メソッドの書式
table.draw(dataTable, options)
draw メソッドの引数
draw メソッドの第一引数は、後述する DataTable オブジェクトです。
draw メソッドの第二引数は、オプションオブジェクトです。現在、この指定は無効です。
DataTable コンストラクタの書式
dataTable=new neta.vis.DataTable(dataSource, version)
Google Visualization において DataTable は、取り扱うデータを格納するとともに、それらのデータの追加、変更、削除、取得に関するメソッドを提供するオブジェクトです。ここで真似る neta.vis.DataTable コンストラクタでは、メソッドは未定義です。カラムのデータは A プロパティに、行のデータは F プロパティに格納します。
第一引数は、データソースです。ここでは、次の書式のオブジェクトが有効です。
{cols:[ {type:'データタイプ'}, {type:'データタイプ'} ], rows:[ {c:[{v:値},{v:値, f:表示値}, {c:[{v:値},{v:値, f:表示値} ] }
第二引数は、Google Visualization のバージョンです。ここでは、無効です。なお、Google Visualization の現行バージョンは 0.6 です。
記述例
neta.addListener(function(){ var table = new neta.vis.Table( document.getElementById('div20101112')); var dat=document.getElementById('data20101112'); var d2=neta.toD2(dat.value||dat.innerHTML); var dataSource=neta.vis.d2toDataSource(d2); var dataTable=new neta.vis.DataTable(dataSource); table.draw(dataTable); });
ここにおいて、neta.addListener は、ロード時に実行する関数を登録する関数、neta.toD2 は、文字列を二次元配列に変換する関数です。また、neta.vis.d2toDataSource は、二次元配列から dataSource オブジェクトを生成する関数です。
実行例
次のデータは、id属性が"data20101112"であるPRE要素の内容です。
1,A 2,B 3,C
上記のデータを読みとって、次にテーブルとして表示しました。
ソースコード
if(!window['neta']['vis'])window['neta']['vis']={}; (function(){ var a=neta.vis; var E=neta.elements; // DataTable a.DataTable=function(dataSource, version){ this.Rb=version||0.6; this.A=dataSource.cols||[]; this.F=dataSource.rows||[]; this.Va=null; } // Table a.Table=function(container){ this.container=container||document.body; this.element=E.element('table'); var self=this; self.draw=function(dataTable,options){ options={};//undefined now self.element.innerHTML=''; self.element.thead=E.element('thead'); self.element.thead.tr=E.element('tr'); for(var j=0;j<dataTable.A.length;j++){ var th=E.element('td',{ innerHTML:dataTable.A[j].label?dataTable.A[j].label: ''}); self.element.thead.tr.append(th); } self.element.thead.append(self.element.thead.tr); self.element.tbody=E.element('tbody'); for(var i=0;i<dataTable.F.length;i++){ var tr=E.element('tr'); for(var j=0;j<dataTable.F[i].c.length;j++){ var td=E.element('td',{ innerHTML:dataTable.F[i].c[j].f?dataTable.F[i].c[j].f: dataTable.F[i].c[j].v}); tr.append(td); } self.element.tbody.append(tr); } self.element.append([self.element.thead,self.element.tbody]); self.container.appendChild(self.element); } } a.d2toDataSource=function(d2){ var data={cols:[],rows:[]}; var len=d2[0].length; for(var j=0;j<len;j++){ data.cols.push({type:'string'}) } for(var i=0;i<d2.length;i++){ data.rows[i]={c:[]}; for(var j=0;j<d2[i].length;j++){ data.rows[i].c.push({v:d2[i][j]}) } } return data; } })();
スクリプトの収録先
neta.js neta.elements.js neta.vis.js2010/11/12 (Fri.) Trackback() Comment(0) JavaScript
Comments
Trackback
Trackback for this entry: