Skip to content

Instantly share code, notes, and snippets.

Created August 1, 2012 11:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/3225927 to your computer and use it in GitHub Desktop.
Save anonymous/3225927 to your computer and use it in GitHub Desktop.
AutoJsonStore
define([
'dojo/store/JsonRest',
'dojo/store/Memory',
'dojo/store/Cache',
'dojo/store/Observable'
], function(JsonRest, Memory, Cache, Observable) {
return function (params) {
var mainStore, pollStore, observers = {}, gRevision = 0;
window.observers = observers;
mainStore = new Observable(new Cache(
new JsonRest(params), new Memory(), {}));
pollStore = new JsonRest(params);
function calcRange() {
var cur, min = 1e100, max = 0, start, end, abs, list = {};
for (cur in observers) {
start = observers[cur].start;
end = observers[cur].count + start;
if(start < min)
min = start;
if(end > max)
max = end;
for(var i=start; i<end; i++) {
list[i] = true;
}
}
for (var x in list) {
abs++;
}
window.observerStats = { max:max, min:min, abs:abs };
}
mainStore.origQuery = mainStore.query;
mainStore.query = function (query, queryOptions) {
var results = mainStore.origQuery(query, queryOptions);
results.origObserve = results.observe;
results.observe = function (listener, incObjUpdates) {
var revision = ++gRevision, handle;
handle = results.origObserve(listener, incObjUpdates);
observers[revision] = queryOptions;
calcRange();
console.log(observers);
handle.origRemove = handle.remove;
handle.remove = handle.cancel = function () {
handle.origRemove();
// observers['deleted' + revision] = observers[revision];
delete observers[revision];
calcRange();
};
return handle;
};
return results;
};
return mainStore;
};
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment