diff options
Diffstat (limited to 'js/dojo/dojox/charting/StoreSeries.js')
| -rw-r--r-- | js/dojo/dojox/charting/StoreSeries.js | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/js/dojo/dojox/charting/StoreSeries.js b/js/dojo/dojox/charting/StoreSeries.js new file mode 100644 index 0000000..d8fa9c9 --- /dev/null +++ b/js/dojo/dojox/charting/StoreSeries.js @@ -0,0 +1,101 @@ +//>>built +define("dojox/charting/StoreSeries", ["dojo/_base/array", "dojo/_base/declare", "dojo/_base/Deferred"], + function(arr, declare, Deferred){ + + return declare("dojox.charting.StoreSeries", null, { + constructor: function(store, kwArgs, value){ + // summary: + // Series adapter for dojo object stores (dojo.store). + // store: Object: + // A dojo object store. + // kwArgs: Object: + // A store-specific keyword parameters used for querying objects. + // See dojo.store docs + // value: Function|Object|String|Null: + // Function, which takes an object handle, and + // produces an output possibly inspecting the store's item. Or + // a dictionary object, which tells what names to extract from + // an object and how to map them to an output. Or a string, which + // is a numeric field name to use for plotting. If undefined, null + // or empty string (the default), "value" field is extracted. + this.store = store; + this.kwArgs = kwArgs; + + if(value){ + if(typeof value == "function"){ + this.value = value; + }else if(typeof value == "object"){ + this.value = function(object){ + var o = {}; + for(var key in value){ + o[key] = object[value[key]]; + } + return o; + }; + }else{ + this.value = function(object){ + return object[value]; + }; + } + }else{ + this.value = function(object){ + return object.value; + }; + } + + this.data = []; + + this.fetch(); + }, + + destroy: function(){ + // summary: + // Clean up before GC. + if(this.observeHandle){ + this.observeHandle.dismiss(); + } + }, + + setSeriesObject: function(series){ + // summary: + // Sets a dojox.charting.Series object we will be working with. + // series: dojox.charting.Series: + // Our interface to the chart. + this.series = series; + }, + + // store fetch loop + + fetch: function(){ + // summary: + // Fetches data from the store and updates a chart. + var objects = this.objects = []; + var self = this; + if(this.observeHandle){ + this.observeHandle.dismiss(); + } + var results = this.store.query(this.kwArgs.query, this.kwArgs); + Deferred.when(results, function(objects){ + self.objects = objects; + update(); + }); + if(results.observe){ + this.observeHandle = results.observe(update, true); + } + function update(){ + self.data = arr.map(self.objects, function(object){ + return self.value(object, self.store); + }); + self._pushDataChanges(); + } + }, + + _pushDataChanges: function(){ + if(this.series){ + this.series.chart.updateSeries(this.series.name, this); + this.series.chart.delayedRender(); + } + } + + }); +}); |
