さて、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と同じだが、クエリの実行をサーバに任せる |