SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

「Dojo道場」~実用アプリ構築のためのベストプラクティス

Dojo道場 ~ 第2回「データAPI(dojo.data)を使いこなす」

「Dojo道場」~実用アプリ構築のためのベストプラクティス

3. dojo.dataの使用

 dojo.dataを利用するとはつまり、前節で扱ったインターフェースを実装したデータストア・オブジェクトを使うことに他なりません。

 dojo.dataはRead, Writeインターフェースを実装した基本データストア実装として、ItemFileReadStoreとItemFileWriteStoreを提供しています。

 これらはJSON形式のオブジェクト(またはJSON形式でオブジェクトを定義したファイル)からデータストアのデータを構築します。次のサンプルコードは配列で用意した人事データからItemFileReadStoreを構築し、fetch()メソッドである条件に合うものだけを抜き出す例です。

<html>
<head>
<title>ItemFileReadStoreの生成とfetch()の使用</title>
<style type="text/css">
@import "../dojo-release-1.5.0/dojo/resources/dojo.css";
@import "../dojo-release-1.5.0/dijit/themes/claro/claro.css";
</style>
<script type="text/javascript" src="../dojo-release-1.5.0/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
<script type="text/javascript">
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dijit.form.Button");
dojo.require("dijit.form.FilteringSelect");

var employee = [
    {empno: "00010", name: "青木", workdept: "人事部", phoneno: "3978", hiredate: "2005/11/25"},
    {empno: "00020", name: "佐藤", workdept: "総務部", phoneno: "4289", hiredate: "2005/11/30"},
    {empno: "00030", name: "田中", workdept: "営業部", phoneno: "8109", hiredate: "2005/11/12"},
    {empno: "00040", name: "山本", workdept: "人事部", phoneno: "1380", hiredate: "2005/11/30"},
    {empno: "00050", name: "山田", workdept: "商品開発部", phoneno: "7911", hiredate: "2005/11/01"}
];

var store;
dojo.addOnLoad(function(){
    store = new dojo.data.ItemFileReadStore(
        {
            /* ItemFileReadStoreはこの形式のJSONを元にして */
            /*  データストア・オブジェクトを構築します                */
            data: {
                items: employee,
                label: "name"
            }
        }
    );
});

function displayByWorkDept() {
    var request = store.fetch({
        query: { workdept: "人事部" }, /* アイテムをデータストアから抽出する条件 */
        onItem: function(item, request) {
            /* 抽出されたアイテムのname属性値を調べてli要素を作る */
            dojo.create("li", {innerHTML: store.getValue(item, "name")}, "list1");
        }
    });
}

</script>
</head>
<body class="claro">
<div id="button1" dojoType="dijit.form.Button" onClick="displayByWorkDept()">人事部所属の人物を抽出</div>
<ul id="list1"></ul>
</body>
</html>

 また、次のサンプルはデータストアをデータの保持に用いるdijit.form.ComboBoxを使用する例です。前サンプルコードとはほとんど同じなのでaddOnLoad()から後のコードのみ掲載します。

function setStoreToFormWidget() {
    dijit.byId("formWidget1").set("store", store);
}

</script>
</head>
<body class="claro">
<div id="formWidget1" dojoType="dijit.form.ComboBox"></div>
<div id="button1" dojoType="dijit.form.Button"
    onClick="setStoreToFormWidget()">ComboBoxにstoreをセット</div>
</body>
</html>

 Dojoのウィジェットには他にもデータストアをデータ元として使用するものがあります。

  • dijit.form.FilteringSelect, dijit.form.Select, dojox.form.CheckedMultiSelect などのフォームウィジェット
  • チャートウィジェット(dojox.charting.* :第1回記事をご覧ください)
  • グリッド(dojox.grid.*)

 同タイプのウィジェットならばほとんどコードに手を加えることなく部品を入れ替えることができます(ためしにサンプルコードのformWidget1のdojoTypeをdijit.form.FilteringSelectに変更して実行してみてください。まったく同じように動作します)。これはdojo.dataを用いて統一された操作でデータを利用することのメリットの一つと言えるでしょう。

次のページ
4. dojo.dataを使用したサンプル

この記事は参考になりましたか?

「Dojo道場」~実用アプリ構築のためのベストプラクティス連載記事一覧

もっと読む

この記事の著者

仁田 圭祐(ニッタ ケイスケ)

日本アイ・ビー・エム株式会社ソフトウェア開発研究所にて日々Webアプリケーションに関わる製品開発をしています。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

三浦 圭司(ミウラ ケイジ)

日本アイ・ビー・エム株式会社ソフトウェア開発研究所に勤務。現在は、エンタープライズ向け製品のWebアプリケーションのユーザー・インターフェース開発に従事。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5608 2010/12/21 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー