SHOEISHA iD

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

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

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

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

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

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

2.2. Writeインターフェース

 WriteインターフェースはReadインターフェースを継承しています。Writeインターフェースを実装したデータストアはReadのメソッドに加えて以下のAPIを実装することになります。

メソッド 説明
newItem: function(/* Object? */ keywordArgs, /* Object? */ parentInfo) データストアに新しくアイテムを1つ作り、作られたアイテムを返します。作るアイテムの属性をkeywordArgsにセットします。parentInfoはオプションの情報で、作るアイテムの親を指示します。データストアによっては必要になります。
deleteItem: function(/* アイテム */ item) データストアから指定されたitemを除去します。成功したときtrueを返します。
setValue: function(/* アイテム */ item, /* string */ attribute, /* なんらかの値 */ value) itemの属性attributeの値としてvalueをセットします。成功したときtrueが返ります。
setValues: function(/* アイテム */ item, /* String */ attribute, /* Array */ array) 配列arrayの各要素をitemの属性attributeの値としてセットします。成功したときtrueが返ります。
unsetAttribute: function( /* アイテム */ item, /* String */ attribute) itemの属性attributeの値をすべて削除します。
save: function(/* Object */ keywordArgs) データストアに対する変更をサーバーに保存します。このメソッドは典型的には非同期で動作します。keywordArgsには{onComplete: Function, onError: Function, scope: Object}の形式のオブジェクトを与えます。
revert: function() まだsave()していないすべての変更を破棄します。
isDirty: function(/* アイテム? */ item) まだsave()していないデータの変更があればtrueを返します。引数を指定しない場合はデータストアのデータ全部、指定した場合は指定したitemを調べます。

 以下の擬似コードはnewItem(), setAttribute()の使い方を示しています。newItem()メソッドはfetch()でアイテムを抜き出す必要がないのでコールバック関数外でも呼ぶことができます。

var newItem = store.newItem({"性別": "男", "氏名": "田中一郎"});
store.setValue(newItem, "年齢", 31);

2.3. Identityインターフェース

 IdentityインターフェースもReadインターフェースを継承しているので、Readに加えて以下のAPIを追加で実装します。

メソッド 説明
getIdentity: function(/* アイテム */ item) アイテムを識別するユニークIDを返します。
getIdentityAttributes: function(/* アイテム */) アイテムのIDを生成するのに使う属性名を配列で返します。ほとんどのデータストアではIDは1つの属性値ですが、複数の属性値を組み合わせていることもあるので配列で返すようになっています。
fetchItemByIdentity: function(/* Object */ keywordArgs) ID(文字列またはObject)をもつアイテム1つを得ます。keywordArgsには{identity: StringまたはObject, onItem: Function, onError: Function, scope: Object}という形で引数をセットします。

 4節でfetchItemByIdentity()メソッドを使う例が登場します。

2.4. Notificationインターフェース

 Notificationインターフェースはデータの変更を通知するためのイベントを定義しています。これを実装するデータストアではデータが変更されたタイミングで各イベントのメソッドが呼ばれるので、各メソッドにdojo.connect()すれば開発者はデータストアのデータ変更のタイミングで何らかの処理が行えます。他と同様にReadインターフェースを継承しています。

メソッド 説明
onSet: function(/* アイテム */ item, /* String */ attribute, /*ObjectまたはArray */ oldValue, /*ObjectまたはArray */ newValue) setValue, setValues, unsetAttributeによりアイテムitemの属性attributeが変化したときに呼ばれます。元の値がoldValueに、変化した後の値がnewValueに入っています。
onNew: function(/* アイテム */ item, /* Object? */ parentInfo) データストアにアイテムitemが新規に追加されたときに呼ばれます。parentInfoは階層化されたデータをもつデータストアのみで使用される親の情報で、{item: 親のアイテム, attribute: 追加されたアイテムが属する属性名, oldValue: その属性の元の値, newValue:その属性の新しい値}という形のオブジェクトです。
onDelete: function(/* アイテム */ deletedItem) データストアからアイテムが除去されたとき、除去が完了した後で呼ばれます。deletedItemは取り除かれたアイテムです。

 onSet(), onNew()の使用例は4節に登場します。

次のページ
3. dojo.dataの使用

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

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

もっと読む

この記事の著者

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

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

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

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

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

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

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

この記事をシェア

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

イベント

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

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

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

メールバックナンバー