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節に登場します。
