忍者ブログ

2024
11
23

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2024/11/23 (Sat.)

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.js
PR

2010/11/12 (Fri.) Trackback() Comment(0) JavaScript

Comments

名前
メールアドレス
URL
コメント
PASS  Vodafone絵文字 i-mode絵文字 Ezweb絵文字

Trackback

Trackback for this entry:

Links

ご注意

当サイトのスクリプトは、ブラウザが FireFox 3.0 であることを前提に作成されています。IE などでは正常に動作しないものがあります。

カテゴリー

ブログ内検索

最新記事

カレンダー

10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

アーカイブ

RSS

最新CM

[04/15 jTemplate]
[05/22 寝太郎]

プロフィール

HN:
寝太郎
性別:
非公開

バーコード

P R

アクセス解析

リンク

NSM

コガネモチ

フリーエリア