Gridを作成する

メモ:  Category:javascript

Ext JSには、さまざまなコンポーネント(ウィジェット)が用意されています。

例えば、タブ、ツリー、グリッド等アプリケーションの作成に必要な部品が多く用意されています。 (コンポーネントのサンプルhttp://extjs.com/products/extjs/)

ここでは、配列のデータをグリッドに表示してみます。

Gridの表示例

配列で用意したデータをGrid表示する

基本となるHTMLを作成します。bodyへdivタグを追加し、idにsample_gridを設定します。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css">
        <script type="text/javascript" src="ext/adapter/ext/ext-base.js"></script>
        <script type="text/javascript" src="ext/ext-all-debug.js"></script>
        <script type="text/javascript" src="main.js"></script>
        <title>New Web Project</title>
    </head>
    <body>
        <h1>New Web Project Page</h1>
        <div id="sample_grid"></div>
    </body>
</html>

JavaScript用のファイル(main.js)を作成しグリッドの表示を行うよう記述していきます。

Ext.BLANK_IMAGE_URL = 'ext/resources/images/default/s.gif';
 
Ext.onReady(function() {
});

最初に配列で適当なデータを用意します。

Ext.BLANK_IMAGE_URL = 'ext/resources/images/default/s.gif';
 
Ext.onReady(function() {
  // 時系列の緯度経度データ
  var gpxTrack = [
      ['2008-10-04 09:54:06',35.371586,136.643680],
      ['2008-10-04 09:54:09',35.371583,136.643082],
      ['2008-10-04 00:54:12',35.371700,136.642497]
  ];
});

Ext.data.Record.createメソッドを使いデータに対するフィールドを定義します。日付型ではdateのインスタンスを生成するため、dateFormatで日付形式を指定します。

nameにはフィールドを参照する時の名前を指定し、typeには表示できる値に変換するための型を指定します。

Ext.BLANK_IMAGE_URL = 'ext/resources/images/default/s.gif';
 
Ext.onReady(function() {
  // 時系列の緯度経度データ
  var gpxTrack = [
      ['2008-10-04 09:54:06',35.371586,136.643680],
      ['2008-10-04 09:54:09',35.371583,136.643082],
      ['2008-10-04 00:54:12',35.371700,136.642497]
  ];
  // フィールドの定義
  var recFields = Ext.data.Record.create([
      {name: 'time', type: 'date', dateFormat: 'Y-m-d H:i:s'},
      {name: 'lat', type: 'float'},
      {name: 'lon', type: 'float'}
  ]);
});

グリッドに表示するデータを作成します。dataへ配列で作成したデータを設定し、 readerにはフィールドの定義を設定します。

Ext.BLANK_IMAGE_URL = 'ext/resources/images/default/s.gif';
 
Ext.onReady(function() {
  // 時系列の緯度経度データ
  var gpxTrack = [
      ['2008-10-04 09:54:06',35.371586,136.643680],
      ['2008-10-04 09:54:09',35.371583,136.643082],
      ['2008-10-04 00:54:12',35.371700,136.642497]
  ];

  var recFields = Ext.data.Record.create([
      {name: 'time', type: 'date', dateFormat: 'Y-m-d H:i:s'},
      {name: 'lat', type: 'float'},
      {name: 'lon', type: 'float'}
  ]);

  // 配列からレコードを取得するのに必要?
  var arrReader = new Ext.data.ArrayReader({}, recFields);

  // フィールドとデータが関連付けられ基データが作成されます
  var store = new Ext.data.Store({
      data: gpxTrack,
      reader: arrReader
  });
});

作成したstoreをGridに表示します。

Ext.BLANK_IMAGE_URL = 'ext/resources/images/default/s.gif';
 
Ext.onReady(function() {
  // 時系列の緯度経度データ
  var gpxTrack = [
      ['2008-10-04 09:54:06',35.371586,136.643680],
      ['2008-10-04 09:54:09',35.371583,136.643082],
      ['2008-10-04 00:54:12',35.371700,136.642497]
  ];

  var recFields = Ext.data.Record.create([
      {name: 'time', type: 'date', dateFormat: 'Y-m-d H:i:s'},
      {name: 'lat', type: 'float'},
      {name: 'lon', type: 'float'}
  ]);

  // 配列からレコードを取得するのに必要?
  var arrReader = new Ext.data.ArrayReader({}, recFields);

  // フィールドとデータが関連付けられ基データが作成されます
  var store = new Ext.data.Store({
      data: gpxTrack,
      reader: arrReader
  });

  // グリッドを描画します
  var grid = new Ext.grid.GridPanel({
      store: store,
      columns: [
          {id:'time',header: "time", width: 140
            , sortable: true, renderer: Ext.util.Format.dateRenderer('Y/m/d H:i:s')
            , dataIndex: 'time'},
          {header: "lat", align: 'right', width: 80, sortable: true, dataIndex: 'lat'},
          {header: "lon", align: 'right', width: 80, sortable: true, dataIndex: 'lon'}
      ],
      stripeRows: true,
      height:200,
      width:305,
      title:'GPX Data',
      renderTo: 'sample_grid'
  });
});

Ext.grid.GridPanelのコンフィグに配列から作成したstoreを設定します。

columnsには、項目タイトル(header)やデータの表示位置(align)、項目の幅(width)、 ソートを許可するかしないか(sortable)、データストアのフィールド名(dataIndex)を指定します。

表示する値を加工したい場合、rendererに関数を指定することで処理することが出来ます。

上記例では、日付の形式を変更するようにしています。

stripeRowsは、行の背景色を1行飛びに変更するかどうかを指定し、height・widthにはグリッド全体の大きさを 指定します。

最後にrenderToで描画先を指定します。

bluenote by BBB