如何用ember.js实时更新jqPlot图?

时间:2012-12-09 15:42:16

标签: ember.js jqplot

我知道如何使用ember更新和重绘没有的jqPlot对象 ...

我创建了以下小提示来显示“问题”:http://jsfiddle.net/QNGWU/

此处,load()的函数App.graphStateController每秒调用一次,并更新控制器内容中的系列数据。

第一个问题:系列的更新似乎没有传播到视图。

第二个问题:即使他们愿意,我可以在哪里拨打电话来更新情节(即plotObj.drawSeries())?

我已经尝试在视图的didInsertElement函数中注册一个观察者:

didInsertElement : function() {
  var me = this;
  me._super();
  me.plotObj = $.jqplot('theegraph', this.series, this.options);
  me.plotObj.draw();
  me.addObserver('series', me.seriesChanged);    
},
seriesChanged: function() {
  var me = this;
  if (me.plotObj != null) {
    me.plotObj.drawSeries({});
  }
}

但这没效果......

1 个答案:

答案 0 :(得分:1)

好吧,想通了,见updated fiddle

秘诀是更新graphState中的整个App.graphStateController对象(不仅仅是它的属性):

var newState = App.GraphState.create();
newState.set('series', series);
me.set('content', newState);

然后在App.graphStateView

中附加观察者
updateGraph : function() {
  [...]
}.observes('graphState')

然后updateGraph函数并不漂亮,因为jqPlot的数据系列存储为[x,y]对。

我想,整个问题是series对象本身的属性optionsApp.graphState不是从Ember.object派生的,因此没有触发任何事件他们。另一种解决方案可能是将其更改为Ember.objects