protovis更新数据

我已经尝试了很多使用jquery更新protovis但没有任何反应。 这是我的代码。

 var minnesota = [{name:"job 1", values:[182904,196530,203944,192492,77393,81243]}] $(document).ready(function(){ draw(); $("button").click(function(){ minnesota = [{name:"changed job", values:[342,34234,2342,543]}] draw(); }); }); function draw(){ var w = 200, h = 30, numberFormat = pv.Format.number(), dateFormat = pv.Format.date("%B %Y"); /* Color by maximum number of people employed in that job. */ var c = pv.Scale.log(minnesota, function(d) pv.max(d.values)) .range("#ccc", "#1f77b4"); /* Tile the visualization for each job. */ var vis = new pv.Panel() .data(minnesota) .width(w) .height(h + 10) .top(6) .left(6) .right(6) .bottom(6); /* A panel instance to store scales (x, y) and the mouseover index (i). */ var panel = vis.add(pv.Panel) .def("i", -1) .def("x", function(d) pv.Scale.linear(d.values, pv.index).range(0, w)) .def("y", function(d) pv.Scale.linear(0, pv.max(d.values)).range(0, h)) .bottom(10) .events("all") .event("mousemove", pv.Behavior.point(Infinity).collapse("y")); /* The area. */ panel.add(pv.Area) .data(function(d) d.values) .fillStyle(function(d, p) panel.i() = 0) .left(function() panel.x()(panel.i())) .bottom(function(d) panel.y()(d.values[panel.i()])) .fillStyle("#ff7f0e") .strokeStyle(null) .size(10); /* The label: either the job name, or the month and value. */ panel.add(pv.Label) .bottom(-1) .textBaseline("top") .left(function() panel.i() < 0 ? 0 : null) .right(function() panel.i() < 0 ? null : 0) .textAlign(function() panel.i() < 0 ? "left" : "right") .textStyle(function() panel.i() < 0 ? "#999" : "#000") .text(function(d) panel.i() < 0 ? d.name : dateFormat(new Date(2000, panel.i() * 3, 1)) + ": " + numberFormat(d.values[panel.i()])); vis.render(); }  

当文件准备好然后它创建图表但是当我点击按钮然后它不重新绘制图表。 我用firebug检查了新的数据值,这很好,但它没有更新图表值。 我已经尝试了很多寻找解决方案,但未能成功。 任何诡计?

对我来说,您的解决方案绘制了一个额外的图表,而不是使用新数据重绘相同的图表。

我在您的代码中移动了一些内容并使更新正常工作。 您只需更新数据并调用vis.redraw,而不是在每次单击时设置整个可视化。

看看: https : //gist.github.com/906247

我只是使用vis.render(); 在每个更改数据的函数的末尾。