2011-08-27 175 views
5

基本上,我希望用户能够通过单击下拉菜单来更改图形的类型:BarRenderer,PieRenderer等。数据是相同的。我知道我可以在同一个元素上再次调用$ .jqplot(),但是我必须再次通过所有设置。而且我的页面有不定数量的图表,这使得该选项成为一个非常糟糕的选择。如何动态更改jqplot渲染器?

我找到了一个关于这个的链接:http://groups.google.com/group/jqplot-users/browse_thread/thread/efe6511cd9496f16/5c625baf78d3b0ae但似乎我仍然需要再次调用$ .jqplot()。

有没有更好的方法来做到这一点?还有一个小问题:只是我,还是jqplot上的文档不好?我必须浏览多个地方才能找到我想要的选项(有时候,选项没有记录,或者我无法以某种方式找到它)。你如何学习如何使用jqplot?

+0

更新的数据,并重新绘制'plot1.series [0]。数据= newData; plot1.resetAxesScale(); plot1.replot();''http://stackoverflow.com/a/10901538/516748 – KCD

回答

5

我认为文档是好的,但你会发现它内部的隐藏功能或没有记录的怪癖。 IIRC(已经有一段时间了),你将不得不再次调用$ .jqplot(),但你首先需要.empty()你的目标,否则你会得到额外的/搞砸的画布。

你真正需要做的是保存数据并允许它后来被称为:

//This isn't real jqplot syntax but it should give you a good idea of what I'm explaining 

var charts = [{name:"chart1",renderer:"pie",data:[[1,2],[2,3]]}] 
$('#graph').jqplot(charts[0]); 

//later 
charts[0].renderer = "bar"; 
$('#graph').empty().jqplot(charts[0]); 
+2

请务必在调用empty()之前调用图表上的destroy(),否则将发生内存泄漏。将第一次调用返回的图表保存为一个变量,然后在“稍后”一节中调用chart.destroy();在重建剧情之前。 –