Das Beispiel AppStore implementiert drei der dojo.data-APIs: Read, Write und Identity. Zu diesen APIs gibt es die folgenden Abschnitte mit Referenzinformationen:
Dies ist eine abstrakte API, an der sich die Implementierungen von Datenanbietern orientieren. Weitere Informationen zu den dojo.data-APIs finden Sie unter http://www.dojotoolkit.org/node/98.
Zusammenfassung der Funktionen | |
---|---|
Object | getValue(Object item, String attribute, String defaultValue) Ruft den Wert des benannten Attributs für das angegebene Element ab |
Array | getValues(Object item, String attribute) Ruft die Werte des benannten Attributs für das angegebene Element ab |
Array | getAttributes(Object item) Gibt ein Array mit allen Attributen dieses Elements zurück |
Boolean | hasAttribute(Object item, String attribute) Gibt true zurück, wenn *item* einen Wert für das angegebene *attribute* hat |
Boolean | containsValue(Object item, String attribute, Object value) Gibt true zurück, wenn der angegebene *value* einer der von der Methode getValues zurückgegebenen Werte ist |
Boolean | isItem(Object something) Gibt zurück, ob *something* ein Element ist und aus dieser Speicherinstanz stammt |
Boolean | isItemLoaded(Object something) Gibt zurück, ob *something* in den lokalen Speicher geladen wurde |
void | loadItem(Object keywordArgs) Wenn ein Element vorhanden ist, wird es von dieser Methode geladen, so dass ein nachfolgender Aufruf von store.isItemLoaded(item) true zurückgibt. |
Object | fetch(Object keywordArgs) Wenn eine Abfrage mit einer Gruppe definierter Optionen vorhanden ist, z. B. mit start und count für die zurückzugebenden Elemente, wird sie von dieser Methode ausgeführt. Die Ergebnisse werden als Datenelemente verfügbar gemacht. |
Object | getFeatures() Gibt ein einfaches Objekt mit Schlüsselwortwerten zurück, das angibt, welche Schnittstellenfeatures der Datenspeicher implementiert |
void | close(Object request) Weist den Speicher an, alle Informationen im Zusammenhang mit einer bestimmten Anforderung abzuschließen |
String | getLabel(Object item) Methode für die Untersuchung des Elements und die Rückgabe einer für den Benutzer lesbaren Bezeichnung des Elements, die eine allgemeine oder adäquate Beschreibung des Elements enthält |
Array | getLabelAttributes(Object item) Methode für die Untersuchung des Elements und die Rückgabe eines Arrays mit den ggf. für die Generierung der Bezeichnung verwendeten Attributen des Elements |
Funktionsdetails |
---|
Ein Element x ohne einen Wert für ein Attribut y ist identisch mit einem Element x ohne das Attribut
y. Es ist ein Widerspruch in sich, wenn das Attribut vorhanden ist, jedoch keinen Wert hat, oder
wenn ein Element ein Attribut ohne zugehörige Attributwerte hat. Falls store.hasAttribute(item, attribute)
false zurückgibt, gibt store.getValue(item, attribute) undefined zurück.
var darthVader = store.getValue(lukeSkywalker, "father");
Diese Methode getValues() funktioniert wie die Methode getValue(), gibt jedoch an Stelle eines einzelnen Attributwertes immer ein Array zurück. Das Array kann leer sein, einen einzelnen Attributwert enthalten oder mehrere Attributwerte enthalten. Wenn das Element keinen Wert für das angegebene Attribut hat, gibt getValues() ein leeres Array ([]) zurück. Falls store.hasAttribute(item, attribute) false zurückgibt, gibt store.getValues(item, attribute) [] zurück.
var friendsOfLuke = store.getValues(lukeSkywalker, "friends");
Gibt ein Array mit allen Attributen dieses Elements zurück. Diese Methode gibt immer ein Array zurück. Wenn das Element gar keine Attribute hat, gibt getAttributes() ein leeres Array ([]) zurück.
var array = store.getAttributes(kermit);
Gibt true zurück, wenn *item* einen Wert für das angegebene *attribute* hat
var trueOrFalse = store.hasAttribute(kermit, "color");
Gibt true zurück, wenn der angegebene *value* einer der von der Methode getValues zurückgegebenen Werte ist
var trueOrFalse = store.containsValue(kermit, "color", "green");
Gibt true zurück, wenn *something* ein Element ist und aus der Speicherinstanz stammt. Wenn *something* ein Literalwert, ein Element aus einer anderen Speicherinstanz oder kein Element ist, wird false zurückgegeben.
var yes = store.isItem(store.newItem()); var no = store.isItem("green");
Gibt false zurück, wenn isItem(something) falsch ist. Gibt false zurück, wenn isItem(something) true ist, das Element jedoch noch nicht in den lokalen Speicher geladen wurde. Der Wert false würde beispielsweise zurückgegeben werden, wenn das Element noch nicht vom Server gelesen wurde.
var yes = store.isItemLoaded(store.newItem()); var no = store.isItemLoaded("green");
Wenn ein Element vorhanden ist, wird es von dieser Methode geladen, so dass ein nachfolgender Aufruf von store.isItemLoaded(item) true zurückgibt. Wenn ein Aufruf von isItemLoaded() true zurückgibt, bevor loadItem() aufgerufen wurde, hat loadItem() nichts zu tun und ruft nicht die Callback-Handler auf. Prüfen Sie vor dem Aufrufen dieser Methode, ob das Element noch nicht geladen wurde.
{ item: object, onItem: Function, onError: Function, scope: object }
Wenn eine Abfrage mit einer Gruppe definierter Optionen vorhanden ist, z. B. mit einem zurückzugebenden Anfangselement und einer Anzahl zurückzugebender Elemente, wird sie von dieser Methode ausgeführt. Die Ergebnisse werden als Datenelemente verfügbar gemacht. Aufgrund ihres Formats erwarten die dojo.data-APIs, dass Datenspeicher im Allgemeinen asynchron arbeiten. Für die Rückgabe der von den Abrufparametern gefundenen Elemente werden deshalb Callbacks verwendet.
Ein Anforderungsobjekt wird unverzüglich zurückgegeben. Die Basisanforderung besteht aus dem Schlüsselwort Args, das für den Abruf übergeben wird, und der zusätzlich angefügten Funktion abort(). Das zurückgegebene Anforderungsobjekt kann verwendet werden, um einen Abruf abzubrechen. Alle zurückgegebenen Datenelemente werden von den Callbacks übergeben, die in den Abrufparametern definiert und nicht im Anforderungsobjekt (request) vorhanden sind.
Dieser Prozess schließt nicht aus, dass angepasste Speicher Methoden und Eigenschaften zum zurückgegebenen Anforderungsobjekt hinzufügen. Die API erfordert jedoch nicht das Hinzufügen von Methoden und Eigenschaften. Weitere Informationen zur API Request finden Sie unter "dojo.data.api.Request".
{ query: Abfragezeichenfolge oder Abfrageobjekt queryOptions: Object, onBegin: Function, onItem: Function, onComplete: Function, onError: Function, scope: Object, start: int count: int sort: Array }
{ ignoreCase: boolean, // Gibt an, ob die Abfrage die Groß- und Kleinschreibung abgleichen abgleichen soll. Das Standardverhalten ist false (kein Abgleich). deep: boolean // Gibt an, ob bei einer Abfrage eine tiefe Suche (Durchsuchen aller Kindelemente und nicht nur der Elemente der // Stammverzeichnisebene eines Datenspeichers) durchgeführt werden soll. Das Standardverhalten ist false (keine tiefe Suche). }
{ attribute: attribute || Zeichenfolge mit dem Attributnamen descending: true|false; // Optional (Standardwert: false) }Wenn ein Element beim Attributvergleich keinen Wert für das Attribut enthält (undefined), stellt die Standardlogik für aufsteigende Sortierung das Element ans Ende der Liste. Bei absteigender Sortierung werden solche Elemente an den Anfang der Liste gestellt.
Wenn das Anforderungsobjekt zurückgegeben wird, kann es auch zusätzliche Eigenschaften haben, z. B. die Eigenschaft request.store, die ein Zeiger auf das Datenspeicherobjekt mit einer Methode fetch() ist.
// Abruf aller in der Abfrage angegebenen Bücher und anschließender Aufruf von 'showBooks' var request = store.fetch({query:"all books", onComplete: showBooks}); // Abruf aller Elemente im Speicher und anschließendes Aufrufen von 'showEverything' var request = store.fetch(onComplete: showEverything); // Abruf von nur 10 Büchern, die der Abfrage 'all books' entsprechen und beim fünften gefundenen Buch beginnen. // Dies demonstriert die Erreichung eines Seitenwechsels bei bestimmten Abfragen. var request = store.fetch({query:"all books", start: 4, count: 10, onComplete: showBooks}); // Abrufen aller Elemente, die mit der Abfrage übereinstimmen und Aufrufen von 'callback', sobald ein Element gefunden wurde. var request = store.fetch({query:"foo/bar", onItem:callback}); // Abrufen der ersten 100 Bücher vom Autor King; wenn bis zu 100 Einträge gefunden wurden, Aufrufen von showKing. var request = store.fetch({query:{author:"King"}, start: 0, count:100, onComplete: showKing}); // Nach Büchern des Autors King suchen, sie nach Titel und Herausgeber sortieren und dann die 100 ersten Einträge der sortierten Liste zurückgeben. var request = store.fetch({query:{author:"King"}, sort: [{ attribute: "Titel", descending: true}, {attribute: "Herausgeber"}], ,start: 0, count:100, onComplete: 'showKing'}); // Abrufen der ersten 100 Bücher, beginnend bei Autoren mit dem Namen King; wenn bis zu 100 Einträge gefunden wurden, Aufrufen von showKing var request = store.fetch({query:{author:"King*"}, start: 0, count:100, onComplete: showKing}); // Abrufen der ersten 100 Bücher von Autoren, deren Name aus vier Buchstaben besteht und auf "ing" endet (King, Bing, Ling, Sing usw.); wenn bis zu 100 Einträge gefunden wurden, // Aufrufen von showBooks. var request = store.fetch({query:{author:"?ing"}, start: 0, count:100, onComplete: showBooks}); // Abrufen der ersten 100 Bücher des Autors King, wobei der Name als King, king, KING, kInG usw. angezeigt werden kann; wenn bis zu 100 Einträge gefunden wurden, Aufrufen von showKing. var request = store.fetch({query:{author:"King"}, queryOptions:(ignoreCase: true}, start: 0, count:100, onComplete: showKing}); // Seitenwechsel: var store = new dojo.data.LargeRdbmsStore({url:"jdbc:odbc:foobar"}); var fetchArgs = { query: {type:"employees", name:"Hillary *"}, // Zeichenfolgenabgleich sort: [{attribute:"department", descending:true}], start: 0, count: 20, scope: displayer, onBegin: showThrobber, onItem: displayItem, onComplete: stopThrobber, onError: handleFetchError, }; store.fetch(fetchArgs); // ... // Wenn Benutzer die Taste für "Nächste Seite" drückt... fetchArgs.start += 20; store.fetch(fetchArgs); // die nächsten 20 Einträge abrufen
var request = store.fetch({onComplete: doSomething}); //... store.close(request);
Dies ist eine abstrakte API, an der sich die Implementierungen von Datenanbietern orientieren. Diese API gibt die für das Schreiben eines Datenspeichers erforderlichen Funktionen an.
Zusammenfassung der Funktionen | |
---|---|
Object | getFeatures() Siehe dojo.data.api.Read.getFeatures |
Object | newItem(Object keywordArgs) Gibt ein neu erstelltes Element zurück |
Boolean | deleteItem(Object item) Löscht ein Element aus dem Speicher |
Boolean | setValue(Object item, String attribute, Object value) Setzt den Wert eines Elementattributs und ersetzt ggf. alle vorherigen Werte |
Boolean | setValues(Object item, String attribute, Array values) Fügt alle Werte aus dem Array *values* als Wert des genannten Attributs für das angegebene Element hinzu und ersetzt ggf. alle vorherigen Werte |
Boolean | unsetAttribute(Object item, String attribute) Löscht alle Werte eines Elementattributs |
Boolean | save(keywordArgs) Speichert alle Änderungen, die lokal auf dem Server vorgenommen wurden |
Boolean | revert() Verwirft alle nicht gespeicherten Änderungen |
Boolean | isDirty(item) Für ein gegebenes Element gibt isDirty() true zurück, wenn das Element seit Abschluss der letzten Methode save modifiziert wurde. |
Funktionsdetails |
---|
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
Dies ist eine abstrakte API, an der sich die Implementierungen von Datenanbietern orientieren. Die definierten Funktionen rufen die individuelle ID eines Elements ab sowie die Argumente, die die ID angegeben haben.
Zusammenfassung der Funktionen | |
---|---|
Object | getFeatures() Siehe dojo.data.api.Read.getFeatures |
Object | getIdentity(Object item) Gibt eine eindeutige ID für ein Element zurück |
Array | getIdentityAttributes(Object item) Gibt ein Array mit Attributnamen zurück, die zum Generieren der ID verwendet wurden |
Object | fetchItemByIdentity(Object keywordArgs) Diese Methode gibt über den Callback onItem zu einer angegebenen Element-ID das Element mit dieser ID zurück. |
Funktionsdetails |
---|
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 }