さて、Dojoにはすでに膨大な数のUIウィジェットが存在することがおわかりいただけたかと思うが、よりウィジェットの高度な機能を使いこなすにはdojo.dataパッケージについての理解が不可欠だ。

dojo.dataとは、簡単に言うと「データの読み書きを抽象化したレイヤ」のことだ。「どこから、どうやって、どんな形式でデータを読み出すか」と言った実装の詳細を隠ぺいし、統一したアクセスを行えるようにするのがdojo.dataの目的だ。このレイヤが存在することで、例えばグリッドやツリーなど、データをわかりやすく視覚化することを目的としたウィジェットは、データの詳細とは関係なく表示に専念できる。

先に挙げたウィジェットの中でも、以下に挙げたウィジェットがdojo.dataに対応している。

  • dijit.form.FilteringSelect
  • dijit.form.ComboBox
  • dijit.Tree
  • dojox.Grid
  • dojox.image
  • dojox.widget.SortList

Dojoxの中にはまだ紹介していないウィジェットも存在するので、現在の時点でもdojo.dataに対応したウィジェットの数はかなりのものだということがおわかりだろう。

dojo.data概要

繰り返しになるが、忘れてはならないのは「dojo.dataはデータを抽象化したレイヤである」と言うことだ。dojo.data自体が何か有用な機能を提供しているわけではなく、APIを規定しているのみだ (dojo.data.apiディレクトリに収められている)。実際の処理を行うのは、データストアと呼ばれるクラスで、データソースごとの様々な違いを吸収し、APIに沿った形で機能を外部に公開している。

では、どのように抽象化されているかと言うと、多種多様なデータソースをサポートするために、「読み取り」と「書き込み」に分かれている。「読み取り」は全てのデータストアがサポートしなくてはならない。「書き込み」はサポートできるデータストアが限られている。

このほか、「データを一意に特定するIDがあるか」「データストアへの変更を通知する機能があるか」によってAPIが分かれており、データストアによってサポートしているAPIが異なる。

データストアのクラス名と、それがサポートしている機能を一覧にしたものが以下の表だ(読み取りはすべてのデータストアがサポートしなければならないため、列から除外してある)。

データストア 説明 書き込み可 ID可 通知可
dojo.data.ItemFileReadStore 形式が多少決められたJSONファイルの読み取りを行う
dojo.data.ItemFileWriteStore ItemFileReadStoreを拡張し、書き込みも可能に。データの保存処理は自作する必要がある
dojox.data.CsvStoree CSVファイルの読み取りを行う
dojox.data.OpmlStore OPMLファイルの読み取りを行う
dojox.data.HtmlTableStore HTMLテーブルをデータとして扱う
dojox.data.XmlStore XMLの読み書きを行える
dojox.data.PicasaStore Picasaからデータを取得する
dojox.data.FlickrStore Flickrからデータを取得する
dojox.data.FlickrRestStore FrickrのREST APIを使ってデータを取得する
dojox.data.QueryReadStore ItemFileReadStoreと同じだが、クエリの実行をサーバに任せる