2

我知道如何在使用 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({});
  }
}

但这没有用...

4

1 回答 1

1

好吧,想通了,请参阅更新的小提琴

秘诀是更新整个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.graphStateEmber.objectEmber.objects

于 2012-12-29T12:07:22.323 回答