我知道如何使用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({});
}
}
但这没效果......
答案 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
对象本身的属性options
和App.graphState
不是从Ember.object
派生的,因此没有触发任何事件他们。另一种解决方案可能是将其更改为Ember.objects
。