1

嗨,我需要以这样一种方式创建 dojo 图表,即它们从某些输入框中获取它们的系列值,并且图表会自动更改。所以有了这个概念,我继续这样做:-

  var showChart= function(){
   var thevalue=dijit.byId('myvalue').get('value');//gets thevalue from the dijit numbertextbox
   var chart1 = new dojox.charting.Chart2D("showgoals");
   chart1.addPlot("default", {type: "Lines"});
   chart1.addAxis("x");
   chart1.addAxis("y", {vertical: true});
   chart1.addSeries("Series 1", [thevalue, 2, 2, 3, 4, 5, 5, 7]);
   chart1.render();};

然后,每当值更改时,我都会调用此函数:-

      dojo.connect(dojo.byId('myvalue'), "onchange",showChart);//whenever value changes the showChart function

叫做

html 看起来像这样:-

<div dojoType="dijit.layout.ContentPane" region="center">
           <div id="showgoals" style="width: 250px; height:150px;" class="graph1"></div>

以下是更改值的文本框:-

<input id="myvalue" type="text" dojoType="dijit.form.NumberTextBox" name="myvalue"value="1000000"  required="true"
                           invalidMessage="Only Numbers allowed"/><br/><br/>

我想要的是,每当这个输入框中的值发生变化时,函数 showchart 就会被调用,并且当前的绘图会自动更改以显示新值,但是发生的事情是我完全得到了一个新图表,这看起来很自然。 . 我是否必须销毁旧图表然后重新创建新图表,如果是,请告诉我如何。

4

1 回答 1

6

showChart函数中,每次使用 调用函数时都会创建一个新图表new dojox.charting.Chart2D("showgoals")。如果要更新图表,可以调用updateSeries更新系列数据,render()再调用更新图表。

代码可能如下所示:

var chart1 = null;
var showChart = function() {
  var thevalue=dijit.byId('myvalue').get('value');
  if (!chart1) {
     var chart1 = new dojox.charting.Chart2D("showgoals");
     chart1.addPlot("default", {type: "Lines"});
     chart1.addAxis("x");
     chart1.addAxis("y", {vertical: true});
     chart1.addSeries("Series 1", [thevalue, 2, 2, 3, 4, 5, 5, 7]);
  } 
  else {
     chart1.updateSeries("Series 1", [thevalue, 2, 2, 3, 4, 5, 5, 7]);
  }
  chart1.render();
}
于 2010-11-24T02:45:33.347 回答