1 | define(["../../_base/declare"], function(declare){ |
---|
2 | |
---|
3 | // module: |
---|
4 | // dojo/api/Store |
---|
5 | |
---|
6 | var Store = declare(null, { |
---|
7 | // summary: |
---|
8 | // This is an abstract API that data provider implementations conform to. |
---|
9 | // This file defines methods signatures and intentionally leaves all the |
---|
10 | // methods unimplemented. For more information on the , |
---|
11 | // please visit: http://dojotoolkit.org/reference-guide/dojo/store.html |
---|
12 | // Every method and property is optional, and is only needed if the functionality |
---|
13 | // it provides is required. |
---|
14 | // Every method may return a promise for the specified return value if the |
---|
15 | // execution of the operation is asynchronous (except |
---|
16 | // for query() which already defines an async return value). |
---|
17 | |
---|
18 | // idProperty: String |
---|
19 | // If the store has a single primary key, this indicates the property to use as the |
---|
20 | // identity property. The values of this property should be unique. |
---|
21 | idProperty: "id", |
---|
22 | |
---|
23 | // queryEngine: Function |
---|
24 | // If the store can be queried locally (on the client side in JS), this defines |
---|
25 | // the query engine to use for querying the data store. |
---|
26 | // This takes a query and query options and returns a function that can execute |
---|
27 | // the provided query on a JavaScript array. The queryEngine may be replace to |
---|
28 | // provide more sophisticated querying capabilities. For example: |
---|
29 | // | var query = store.queryEngine({foo:"bar"}, {count:10}); |
---|
30 | // | query(someArray) -> filtered array |
---|
31 | // The returned query function may have a "matches" property that can be |
---|
32 | // used to determine if an object matches the query. For example: |
---|
33 | // | query.matches({id:"some-object", foo:"bar"}) -> true |
---|
34 | // | query.matches({id:"some-object", foo:"something else"}) -> false |
---|
35 | queryEngine: null, |
---|
36 | |
---|
37 | get: function(id){ |
---|
38 | // summary: |
---|
39 | // Retrieves an object by its identity |
---|
40 | // id: Number |
---|
41 | // The identity to use to lookup the object |
---|
42 | // returns: Object |
---|
43 | // The object in the store that matches the given id. |
---|
44 | }, |
---|
45 | getIdentity: function(object){ |
---|
46 | // summary: |
---|
47 | // Returns an object's identity |
---|
48 | // object: Object |
---|
49 | // The object to get the identity from |
---|
50 | // returns: String|Number |
---|
51 | }, |
---|
52 | put: function(object, directives){ |
---|
53 | // summary: |
---|
54 | // Stores an object |
---|
55 | // object: Object |
---|
56 | // The object to store. |
---|
57 | // directives: dojo/store/api/Store.PutDirectives? |
---|
58 | // Additional directives for storing objects. |
---|
59 | // returns: Number|String |
---|
60 | }, |
---|
61 | add: function(object, directives){ |
---|
62 | // summary: |
---|
63 | // Creates an object, throws an error if the object already exists |
---|
64 | // object: Object |
---|
65 | // The object to store. |
---|
66 | // directives: dojo/store/api/Store.PutDirectives? |
---|
67 | // Additional directives for creating objects. |
---|
68 | // returns: Number|String |
---|
69 | }, |
---|
70 | remove: function(id){ |
---|
71 | // summary: |
---|
72 | // Deletes an object by its identity |
---|
73 | // id: Number |
---|
74 | // The identity to use to delete the object |
---|
75 | delete this.index[id]; |
---|
76 | var data = this.data, |
---|
77 | idProperty = this.idProperty; |
---|
78 | for(var i = 0, l = data.length; i < l; i++){ |
---|
79 | if(data[i][idProperty] == id){ |
---|
80 | data.splice(i, 1); |
---|
81 | return; |
---|
82 | } |
---|
83 | } |
---|
84 | }, |
---|
85 | query: function(query, options){ |
---|
86 | // summary: |
---|
87 | // Queries the store for objects. This does not alter the store, but returns a |
---|
88 | // set of data from the store. |
---|
89 | // query: String|Object|Function |
---|
90 | // The query to use for retrieving objects from the store. |
---|
91 | // options: dojo/store/api/Store.QueryOptions |
---|
92 | // The optional arguments to apply to the resultset. |
---|
93 | // returns: dojo/store/api/Store.QueryResults |
---|
94 | // The results of the query, extended with iterative methods. |
---|
95 | // |
---|
96 | // example: |
---|
97 | // Given the following store: |
---|
98 | // |
---|
99 | // ...find all items where "prime" is true: |
---|
100 | // |
---|
101 | // | store.query({ prime: true }).forEach(function(object){ |
---|
102 | // | // handle each object |
---|
103 | // | }); |
---|
104 | }, |
---|
105 | transaction: function(){ |
---|
106 | // summary: |
---|
107 | // Starts a new transaction. |
---|
108 | // Note that a store user might not call transaction() prior to using put, |
---|
109 | // delete, etc. in which case these operations effectively could be thought of |
---|
110 | // as "auto-commit" style actions. |
---|
111 | // returns: dojo/store/api/Store.Transaction |
---|
112 | // This represents the new current transaction. |
---|
113 | }, |
---|
114 | getChildren: function(parent, options){ |
---|
115 | // summary: |
---|
116 | // Retrieves the children of an object. |
---|
117 | // parent: Object |
---|
118 | // The object to find the children of. |
---|
119 | // options: dojo/store/api/Store.QueryOptions? |
---|
120 | // Additional options to apply to the retrieval of the children. |
---|
121 | // returns: dojo/store/api/Store.QueryResults |
---|
122 | // A result set of the children of the parent object. |
---|
123 | }, |
---|
124 | getMetadata: function(object){ |
---|
125 | // summary: |
---|
126 | // Returns any metadata about the object. This may include attribution, |
---|
127 | // cache directives, history, or version information. |
---|
128 | // object: Object |
---|
129 | // The object to return metadata for. |
---|
130 | // returns: Object |
---|
131 | // An object containing metadata. |
---|
132 | } |
---|
133 | }); |
---|
134 | |
---|
135 | Store.PutDirectives = declare(null, { |
---|
136 | // summary: |
---|
137 | // Directives passed to put() and add() handlers for guiding the update and |
---|
138 | // creation of stored objects. |
---|
139 | // id: String|Number? |
---|
140 | // Indicates the identity of the object if a new object is created |
---|
141 | // before: Object? |
---|
142 | // If the collection of objects in the store has a natural ordering, |
---|
143 | // this indicates that the created or updated object should be placed before the |
---|
144 | // object specified by the value of this property. A value of null indicates that the |
---|
145 | // object should be last. |
---|
146 | // parent: Object?, |
---|
147 | // If the store is hierarchical (with single parenting) this property indicates the |
---|
148 | // new parent of the created or updated object. |
---|
149 | // overwrite: Boolean? |
---|
150 | // If this is provided as a boolean it indicates that the object should or should not |
---|
151 | // overwrite an existing object. A value of true indicates that a new object |
---|
152 | // should not be created, the operation should update an existing object. A |
---|
153 | // value of false indicates that an existing object should not be updated, a new |
---|
154 | // object should be created (which is the same as an add() operation). When |
---|
155 | // this property is not provided, either an update or creation is acceptable. |
---|
156 | }); |
---|
157 | |
---|
158 | Store.SortInformation = declare(null, { |
---|
159 | // summary: |
---|
160 | // An object describing what attribute to sort on, and the direction of the sort. |
---|
161 | // attribute: String |
---|
162 | // The name of the attribute to sort on. |
---|
163 | // descending: Boolean |
---|
164 | // The direction of the sort. Default is false. |
---|
165 | }); |
---|
166 | |
---|
167 | Store.QueryOptions = declare(null, { |
---|
168 | // summary: |
---|
169 | // Optional object with additional parameters for query results. |
---|
170 | // sort: dojo/store/api/Store.SortInformation[]? |
---|
171 | // A list of attributes to sort on, as well as direction |
---|
172 | // For example: |
---|
173 | // | [{attribute:"price, descending: true}]. |
---|
174 | // If the sort parameter is omitted, then the natural order of the store may be |
---|
175 | // applied if there is a natural order. |
---|
176 | // start: Number? |
---|
177 | // The first result to begin iteration on |
---|
178 | // count: Number? |
---|
179 | // The number of how many results should be returned. |
---|
180 | }); |
---|
181 | |
---|
182 | Store.QueryResults = declare(null, { |
---|
183 | // summary: |
---|
184 | // This is an object returned from query() calls that provides access to the results |
---|
185 | // of a query. Queries may be executed asynchronously. |
---|
186 | |
---|
187 | forEach: function(callback, thisObject){ |
---|
188 | // summary: |
---|
189 | // Iterates over the query results, based on |
---|
190 | // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/forEach. |
---|
191 | // Note that this may executed asynchronously. The callback may be called |
---|
192 | // after this function returns. |
---|
193 | // callback: |
---|
194 | // Function that is called for each object in the query results |
---|
195 | // thisObject: |
---|
196 | // The object to use as |this| in the callback. |
---|
197 | |
---|
198 | }, |
---|
199 | filter: function(callback, thisObject){ |
---|
200 | // summary: |
---|
201 | // Filters the query results, based on |
---|
202 | // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter. |
---|
203 | // Note that this may executed asynchronously. The callback may be called |
---|
204 | // after this function returns. |
---|
205 | // callback: |
---|
206 | // Function that is called for each object in the query results |
---|
207 | // thisObject: |
---|
208 | // The object to use as |this| in the callback. |
---|
209 | // returns: dojo/store/api/Store.QueryResults |
---|
210 | }, |
---|
211 | map: function(callback, thisObject){ |
---|
212 | // summary: |
---|
213 | // Maps the query results, based on |
---|
214 | // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map. |
---|
215 | // Note that this may executed asynchronously. The callback may be called |
---|
216 | // after this function returns. |
---|
217 | // callback: |
---|
218 | // Function that is called for each object in the query results |
---|
219 | // thisObject: |
---|
220 | // The object to use as |this| in the callback. |
---|
221 | // returns: dojo/store/api/Store.QueryResults |
---|
222 | }, |
---|
223 | then: function(callback, errorHandler){ |
---|
224 | // summary: |
---|
225 | // This registers a callback for when the query is complete, if the query is asynchronous. |
---|
226 | // This is an optional method, and may not be present for synchronous queries. |
---|
227 | // callback: |
---|
228 | // This is called when the query is completed successfully, and is passed a single argument |
---|
229 | // that is an array representing the query results. |
---|
230 | // errorHandler: |
---|
231 | // This is called if the query failed, and is passed a single argument that is the error |
---|
232 | // for the failure. |
---|
233 | }, |
---|
234 | observe: function(listener, includeAllUpdates){ |
---|
235 | // summary: |
---|
236 | // This registers a callback for notification of when data is modified in the query results. |
---|
237 | // This is an optional method, and is usually provided by dojo/store/Observable. |
---|
238 | // listener: Function |
---|
239 | // The listener function is called when objects in the query results are modified |
---|
240 | // to affect the query result. The listener function is called with the following arguments: |
---|
241 | // | listener(object, removedFrom, insertedInto); |
---|
242 | // |
---|
243 | // - The object parameter indicates the object that was create, modified, or deleted. |
---|
244 | // - The removedFrom parameter indicates the index in the result array where |
---|
245 | // the object used to be. If the value is -1, then the object is an addition to |
---|
246 | // this result set (due to a new object being created, or changed such that it |
---|
247 | // is a part of the result set). |
---|
248 | // - The insertedInto parameter indicates the index in the result array where |
---|
249 | // the object should be now. If the value is -1, then the object is a removal |
---|
250 | // from this result set (due to an object being deleted, or changed such that it |
---|
251 | // is not a part of the result set). |
---|
252 | // includeAllUpdates: |
---|
253 | // This indicates whether or not to include object updates that do not affect |
---|
254 | // the inclusion or order of the object in the query results. By default this is false, |
---|
255 | // which means that if any object is updated in such a way that it remains |
---|
256 | // in the result set and it's position in result sets is not affected, then the listener |
---|
257 | // will not be fired. |
---|
258 | |
---|
259 | }, |
---|
260 | // total: Number|Promise? |
---|
261 | // This property should be included in if the query options included the "count" |
---|
262 | // property limiting the result set. This property indicates the total number of objects |
---|
263 | // matching the query (as if "start" and "count" weren't present). This may be |
---|
264 | // a promise if the query is asynchronous. |
---|
265 | total: 0 |
---|
266 | }); |
---|
267 | |
---|
268 | Store.Transaction = declare(null, { |
---|
269 | // summary: |
---|
270 | // This is an object returned from transaction() calls that represents the current |
---|
271 | // transaction. |
---|
272 | |
---|
273 | commit: function(){ |
---|
274 | // summary: |
---|
275 | // Commits the transaction. This may throw an error if it fails. Of if the operation |
---|
276 | // is asynchronous, it may return a promise that represents the eventual success |
---|
277 | // or failure of the commit. |
---|
278 | }, |
---|
279 | abort: function(callback, thisObject){ |
---|
280 | // summary: |
---|
281 | // Aborts the transaction. This may throw an error if it fails. Of if the operation |
---|
282 | // is asynchronous, it may return a promise that represents the eventual success |
---|
283 | // or failure of the abort. |
---|
284 | } |
---|
285 | }); |
---|
286 | return Store; |
---|
287 | }); |
---|