68 lines
1.9 KiB
JavaScript
68 lines
1.9 KiB
JavaScript
|
/*
|
||
|
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
|
||
|
Available via Academic Free License >= 2.1 OR the modified BSD license.
|
||
|
see: http://dojotoolkit.org/license for details
|
||
|
*/
|
||
|
|
||
|
|
||
|
if(!dojo._hasResource["dojo.store.util.QueryResults"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
|
||
|
dojo._hasResource["dojo.store.util.QueryResults"] = true;
|
||
|
dojo.provide("dojo.store.util.QueryResults");
|
||
|
|
||
|
dojo.getObject("store.util", true, dojo);
|
||
|
|
||
|
dojo.store.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 = dojo.delegate(results);
|
||
|
}
|
||
|
function addIterativeMethod(method){
|
||
|
if(!results[method]){
|
||
|
results[method] = function(){
|
||
|
var args = arguments;
|
||
|
return dojo.when(results, function(results){
|
||
|
Array.prototype.unshift.call(args, results);
|
||
|
return dojo.store.util.QueryResults(dojo[method].apply(dojo, args));
|
||
|
});
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
addIterativeMethod("forEach");
|
||
|
addIterativeMethod("filter");
|
||
|
addIterativeMethod("map");
|
||
|
if(!results.total){
|
||
|
results.total = dojo.when(results, function(results){
|
||
|
return results.length;
|
||
|
});
|
||
|
}
|
||
|
return results;
|
||
|
};
|
||
|
|
||
|
}
|