AppStore は、Read、Write、および Identity の 3 つの dojo.data API を実装します。 各 API に関しては、次の参考資料をお読みください。
データ・プロバイダーの実装は、この抽象 API に従って行われます。 dojo.data API について詳しくは、以下を参照してください。 http://www.dojotoolkit.org/node/98
関数の要約 | |
---|---|
オブジェクト | getValue(Object item, String attribute, String defaultValue) 所定の項目の指定された属性の値を検索します。 |
配列 | getValues(Object item, String attribute) 所定の項目の指定された属性の値を検索します。 |
配列 | getAttributes(Object item) この項目のすべての属性が入った配列を戻します。 |
ブール | hasAttribute(Object item, String attribute) 所定の *item* の所定の *attribute* に値がある場合は、true を戻します。 |
ブール | containsValue(Object item, String attribute, Object value) 所定の *value* が getValues メソッドによって戻される値のいずれかである場合は、true を戻します。 |
ブール | isItem(Object something) *something* が項目であり、このストア・インスタンスからのものであるかどうかを戻します。 |
ブール | isItemLoaded(Object something) *something* がローカル・メモリーにロードされているかどうかを戻します。 |
void | loadItem(Object keywordArgs) 項目が指定された場合に、このメソッドは項目をロードし、 以後の store.isItemLoaded(item) への呼び出しで true が戻されるようにします。 |
オブジェクト | fetch(Object keywordArgs) 照会と定義済みオプションのセット (戻される項目の start と count など) が指定された場合に、 このメソッドは、照会を実行し、結果をデータ項目として使用できるようにします。 |
オブジェクト | getFeatures() データ・ストアが実装するインターフェース・フィーチャーを指定する、 単純なキーワード値オブジェクトを戻します。 |
void | close(Object request) ストアに対して、特定の要求に関連した情報をクローズアウトするよう指示します。 |
ストリング | getLabel(Object item) 項目を検査し、ユーザーが読み取れる項目のラベルを戻すメソッド。 このラベルには、一般的かつ適切な項目の説明が提供されます。 |
配列 | getLabelAttributes(Object item) 項目を検査し、そのラベルを生成するために使用した項目の属性の配列を戻すメソッド (存在する場合)。 |
関数の詳細 |
---|
項目 x に属性 y の値がないということは、項目 x に属性 y がないということと同じです。
値を持たない属性が存在したり、項目に属性があるのにその属性値がないというのは矛盾しています。
store.hasAttribute(item, attribute) が false を戻した場合、
store.getValue(item, attribute) は undefined を戻します。
var darthVader = store.getValue(lukeSkywalker, "father");
この getValues() メソッドは、getValue() メソッドと同様に機能しますが、 getValues() は常に、単一の属性値ではなく配列を戻します。 配列は、空であることもあれば、単一の属性値を含んでいることもあります。 また、複数の属性値が含まれていることもあります。 項目が所定の属性の値を持たない場合、 getValues() は空の配列 [] を戻します。 store.hasAttribute(item, attribute) が false を戻した場合、 store.getValues(item, attribute) は [] を戻します。
var friendsOfLuke = store.getValues(lukeSkywalker, "friends");
この項目が持つすべての属性を含む配列を戻します。 このメソッドは、常に配列を戻します。 項目に属性が全くない場合、getAttributes() は空の配列 [] を戻します。
var array = store.getAttributes(kermit);
所定の *item* の所定の *attribute* に値がある場合は、true を戻します。
var trueOrFalse = store.hasAttribute(kermit, "color");
所定の *value* が getValues メソッドによって戻される値のいずれかである場合は、true を戻します。
var trueOrFalse = store.containsValue(kermit, "color", "green");
*something* が項目であり、ストア・インスタンスからのものである場合は、true を戻します。 *something* がリテラル値、別のストア・インスタンスからの項目、 または項目以外のオブジェクトである場合には、false を戻します。
var yes = store.isItem(store.newItem()); var no = store.isItem("green");
isItem(something) が false である場合は false を戻します。 isItem(something) が true であっても項目がまだローカル・メモリーにロードされていない場合には、false を戻します。 例えば、項目がサーバーからまだ読み取られていない場合は、false 値が戻されます。
var yes = store.isItemLoaded(store.newItem()); var no = store.isItemLoaded("green");
項目が指定された場合に、このメソッドはその項目をロードし、 以後の store.isItemLoaded(item) への呼び出しで true が戻されるようにします。 loadItem() が呼び出される前に isItemLoaded() への呼び出しで true が戻された場合、 loadItem() は機能せず、コールバック・ハンドラーを呼び出しません。 このメソッドを呼び出す前に、項目がまだロードされていないことを確認してください。
{ item: object, onItem: Function, onError: Function, scope: object }
照会と定義済みオプションのセット (戻される項目の start と count など) が指定された場合に、 このメソッドは、照会を実行し、結果をデータ項目として使用できるようにします。 dojo.data API は、非同期 API として設計されています。このため、AppStore は、定義済みの非同期のコールバックを使用して、fetch パラメーターによって検出された項目を戻します。
要求オブジェクトは即時に戻されます。 基本要求は、キーワード引数で、fetch に渡され、追加の関数 abort() が付加されます。 戻された要求オブジェクトは、fetch をキャンセルするために使用されます。 戻されたすべてのデータ項目は、fetch パラメーターで定義されたコールバックを介して渡され、 「要求」オブジェクト上には存在しません。
このプロセスは、カスタム・ストアが、戻された要求オブジェクトにメソッドとプロパティーを追加できないことを示しているのではありません。単に、API がそのオブジェクトを必要としていないことを示しているだけです。 要求 API について詳しくは、dojo.data.api.Request を参照してください。
{ query: query-string or query-object, queryOptions: object, onBegin: Function, onItem: Function, onComplete: Function, onError: Function, scope: object, start: int count: int sort: array }
{ ignoreCase: boolean, //Whether or not the query should match case sensitively or not. Default behavior is false. deep: boolean //Whether or not a fetch should do a deep search of items and all child //items instead of just root-level items in a datastore. Default is false. }
{ attribute: attribute || attribute-name-string, descending: true|false; // Optional. Default is false. }属性を比較する際に、項目に属性の値が含まれていない (undefined) 場合、 その項目は、デフォルトの昇順ソート・ロジックにより、リストの一番下に配置されます。 降順の場合、そのような項目はリストの一番上に配置されます。
要求オブジェクトには、戻されるときにプロパティーが追加されている場合もあります。 例えば request.store プロパティーなどで、これはデータ・ストア・オブジェクトを指すポインターです。 この場合、fetch() はメソッドです。
// Fetch all books identified by the query and call 'showBooks' when complete var request = store.fetch({query:"all books", onComplete: showBooks}); // Fetch all items in the story and call 'showEverything' when complete. var request = store.fetch(onComplete: showEverything); // Fetch only 10 books that match the query 'all books', starting at the fifth book found during the search. // This demonstrates how paging can be done for specific queries. var request = store.fetch({query:"all books", start: 4, count: 10, onComplete: showBooks}); // Fetch all items that match the query, calling 'callback' each time an item is located. var request = store.fetch({query:"foo/bar", onItem:callback}); // Fetch the first 100 books by author King, call showKing when up to 100 items have been located. var request = store.fetch({query:{author:"King"}, start: 0, count:100, onComplete: showKing}); // Locate the books written by Author King. Sort it on title and publisher, then return the first 100 items from the sorted items. var request = store.fetch({query:{author:"King"}, sort: [{ attribute: "title", descending: true}, {attribute: "publisher"}], ,start: 0, count:100, onComplete: 'showKing'}); // Fetch the first 100 books by authors starting with the name King, then call showKing when up to 100 items have been located. var request = store.fetch({query:{author:"King*"}, start: 0, count:100, onComplete: showKing}); // Fetch the first 100 books by authors ending with 'ing', but only have one character before it (King, Bing, Ling, Sing, etc.), then call showBooks when up to 100 items // have been located. var request = store.fetch({query:{author:"?ing"}, start: 0, count:100, onComplete: showBooks}); // Fetch the first 100 books by author King, where the name is displayed as King, king, KING, kInG, and so on, then call showKing when up to 100 items have been located. var request = store.fetch({query:{author:"King"}, queryOptions:(ignoreCase: true}, start: 0, count:100, onComplete: showKing}); // Paging: var store = new dojo.data.LargeRdbmsStore({url:"jdbc:odbc:foobar"}); var fetchArgs = { query: {type:"employees", name:"Hillary *"}, // string matching sort: [{attribute:"department", descending:true}], start: 0, count: 20, scope: displayer, onBegin: showThrobber, onItem: displayItem, onComplete: stopThrobber, onError: handleFetchError, }; store.fetch(fetchArgs); // ... // When the user presses the "Next Page" button... fetchArgs.start += 20; store.fetch(fetchArgs); // get the next 20 items
var request = store.fetch({onComplete: doSomething}); //... store.close(request);
データ・プロバイダーの実装は、この抽象 API に従って行われます。 この API は、データ・ストアへの書き込みに必要な関数を指定します。
関数の要約 | |
---|---|
オブジェクト | getFeatures() dojo.data.api.Read.getFeatures を参照してください |
オブジェクト | newItem(Object keywordArgs) 新規に作成された項目を戻します |
ブール | deleteItem(Object item) ストアから項目を削除します |
ブール | setValue(Object item, String attribute, Object value) 項目の属性の値を設定し、以前の値 (複数可) を置換します。 |
ブール | setValues(Object item, String attribute, Array values) *values* 配列内の各値を、所定の項目の所定の属性の値として追加し、 以前の値 (複数可) を置換します |
ブール | unsetAttribute(Object item, String attribute) 項目のすべての属性の値を削除します |
ブール | save(keywordArgs) サーバーに対してローカルで行われたすべての変更内容を保存します。 |
ブール | revert() 保存されていない変更内容を破棄します。 |
ブール | isDirty(item) 項目が指定された場合、前回の save メソッドの完了から項目が変更されていると、 isDirty() は true を戻します |
関数の詳細 |
---|
var kermit = store.newItem({name: "Kermit", color:[blue, green]});
var success = store.deleteItem(kermit);
var success = store.set(kermit, "color", "green");
var success = store.setValues(kermit, "color", ["green", "aqua"]); success = store.setValues(kermit, "color", []); if (success) {assert(!store.hasAttribute(kermit, "color"));}
var success = store.unsetAttribute(kermit, "color"); if (success) {assert(!store.hasAttribute(kermit, "color"));}
{ onComplete: function onError: function scope: object }
store.save({onComplete: onSave}); store.save({scope: fooObj, onComplete: onSave, onError: saveFailed});
var success = store.revert();
var trueOrFalse = store.isDirty(kermit); // true if kermit is dirty var trueOrFalse = store.isDirty(); // true if any item is dirty
データ・プロバイダーの実装は、この抽象 API に従って行われます。 定義された関数は、項目の個々の ID と、その ID を提供した属性を検索します。
関数の要約 | |
---|---|
オブジェクト | getFeatures() dojo.data.api.Read.getFeatures を参照してください |
オブジェクト | getIdentity(Object item) 項目の固有 ID を戻します |
配列 | getIdentityAttributes(Object item) ID の生成に使用する属性名の配列を戻します |
オブジェクト | fetchItemByIdentity(Object keywordArgs) 項目の ID が指定されている場合、このメソッドは、onItem コールバックを介してその ID を持つ項目を戻します。 |
関数の詳細 |
---|
var itemId = store.getIdentity(kermit); assert(kermit === store.findByIdentity(store.getIdentity(kermit)));
var itemId = store.getIdentity(kermit); var identifiers = store.getIdentityAttributes(itemId); assert(typeof identifiers === "array" || identifiers === null);
{ identity: string|object, onItem: Function, onError: Function, scope: object }