diff options
Diffstat (limited to 'lib/dojo/store/util/QueryResults.js.uncompressed.js')
-rw-r--r-- | lib/dojo/store/util/QueryResults.js.uncompressed.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/lib/dojo/store/util/QueryResults.js.uncompressed.js b/lib/dojo/store/util/QueryResults.js.uncompressed.js new file mode 100644 index 000000000..58503179a --- /dev/null +++ b/lib/dojo/store/util/QueryResults.js.uncompressed.js @@ -0,0 +1,63 @@ +define("dojo/store/util/QueryResults", ["../../_base/array", "../../_base/lang", "../../_base/Deferred" +], function(array, lang, Deferred){ + +// module: +// dojo/store/util/QueryResults + +var 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`. + // results: Array|dojo/promise/Promise + // The result set as an array, or a promise for an array. + // returns: + // 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 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; // Object +}; + +lang.setObject("dojo.store.util.QueryResults", QueryResults); + +return QueryResults; + +}); |