javascript - Meteor update flot chart -


when using meteor 0.8.0, how update flot chart when new data arrives? looked @ example @ meteor-flot, updating fake data via timer on page. , not reactive data coming collection.

so far have like:

// returns object label , array of timestamp, value // { label:'test', data:[[1397605016000, 1332],[1397605616000,1356],[1397606216000,1380]]} template.example.helpers({   readings: function(){     datareadings.find();   } });  template.example.rendered = function() {   $.plot ($("#flot"), [this.data.data], {     series: {       lines: {         show: true       },       points: {         show: true       }     },     xaxis: {       mode: 'time',       timeformat: '%h:%m'     }   }); }; 

this works great initial render, not sure how go updating chart once new data arrives, once every 5 minutes. how call plot.setdata(newdata) & plot.draw() when new data arrives?

one way using cursor/collection observer. i'm using method in meteor app update flot chart , works great.

after initial plot creation in template.example.rendered function, add cursor observer updates chart anytime new document added (or removed) on collection:

//  subscribe collection (or no need if it's done on route) meteor.subscribe('datareadings', somefiltervarornot);  //  add cursor observer documents added date greater  //  right (uses moment.js) //  (if don't this, you'll "added" fire every document  //  that's been added - not sure why datareadingsobservehandle = datareadings.find({   createdat: {$gte: moment().todate()}}).observe({      //  fires anytime new document added     added: function(datareading) {       $('#flot').data("plot").setdata(datareading.data);       $('#flot').data("plot").draw();        //  or setup whatever query/calculation need assemble        //  new data set chart, there other observers       //  observechanges() let see how document has changed versus       //  being added or removed     },      //  fires anytime document removed     removed: function(removeddatareading) {       //  update , redraw chart above...   } }); 

the datareadingsobservehandle intentionally global can destroy later because apparently collection observer server intensive. doesn't have global if have scope access wherever need destroyed:

//  once chart no longer needs updated call... datareadingsobservehandle.stop(); datareadingsobservehandle = null; 

i believe when user navigates different template , no longer looking @ chart, observer automatically gets destroyed. see http://docs.meteor.com/#observe more information.

i love hear other methods using reactivevar or deps.dependency. if they're more efficient


Comments

Popular posts from this blog

javascript - jquery or ashx not working -

opencv - DataType<cv::detail::deriv_type>::depth what is it used for -

python 3.x - Mapping specific letters onto a list of words -