12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- define("dojo/store/util/QueryResults", ["../../_base/array", "../../_base/lang", "../../_base/Deferred"
- ], function(array, lang, Deferred) {
- // module:
- // dojo/store/util/QueryResults
- // summary:
- // The module defines a query results wrapper
- var util = lang.getObject("dojo.store.util", true);
- util.QueryResults = function(results){
- // summary:
- // A function that wraps the results of a store query with additional
- // methods.
- //
- // description:
- // QueryResults is a basic wrapper that allows for array-like iteration
- // over any kind of returned data from a query. While the simplest store
- // will return a plain array of data, other stores may return deferreds or
- // promises; this wrapper makes sure that *all* results can be treated
- // the same.
- //
- // Additional methods include `forEach`, `filter` and `map`.
- //
- // returns: Object
- // An array-like object that can be used for iterating over.
- //
- // example:
- // Query a store and iterate over the results.
- //
- // | store.query({ prime: true }).forEach(function(item){
- // | // do something
- // | });
- if(!results){
- return results;
- }
- // if it is a promise it may be frozen
- if(results.then){
- results = lang.delegate(results);
- }
- function addIterativeMethod(method){
- if(!results[method]){
- results[method] = function(){
- var args = arguments;
- return Deferred.when(results, function(results){
- Array.prototype.unshift.call(args, results);
- return util.QueryResults(array[method].apply(array, args));
- });
- };
- }
- }
- addIterativeMethod("forEach");
- addIterativeMethod("filter");
- addIterativeMethod("map");
- if(!results.total){
- results.total = Deferred.when(results, function(results){
- return results.length;
- });
- }
- return results;
- };
- return util.QueryResults;
- });
|