2014-03-12 63 views
0

我想調用一個包含構建Highcharts圖表的代碼的函數,但是我正在拋出錯誤。在函數內調用Highcharts

TypeError: $(...).highcharts is not a function  

data: (function() { 

我已經確保highcharts.js在我試圖構建圖表之前被調用。

如果我刪除該函數,並將其作爲正常的代碼存放在該代碼中,那麼該圖表會生成良好的圖表,但我希望圖表上的數據沒有時間被提取,因此未加載到圖表中。因此,我正在使用setTimeout()等待在加載圖表之前獲取數據,但圖表現在不加載。

webiopi().callMacro("getTempHist", [], arrayTemp); 
    function arrayTemp(macro, args, data) { 
     testlist = data.split(" "); 

     $(document).ready(function() { 
      Highcharts.setOptions({ 
      global: { 
       useUTC: false 
      } 
      }); 

      var chart; 
      $('#temptracker').highcharts({ 
      chart: { 
       type: 'line', 
       animation: Highcharts.svg, // don't animate in old IE 
       marginRight: 10, 
       events: { 
       load: function() { 

        // set up the updating of the chart each second 
        var series = this.series[0]; 
        setInterval(function() { 
        var x = (new Date()).getTime(), // current time 
         y = Number(temp0); 
        series.addPoint([x, y], true, true); 
        }, 60000); 
       } 
       } 
      }, 
      title: { 
       text: 'Live Temperature' 
      }, 
      xAxis: { 
       type: 'datetime', 
       tickPixelInterval: 100 
      }, 
      yAxis: { 
       title: { 
       text: 'Temperature' 
       }, 
       plotLines: [{ 
       value: 0, 
       width: 1, 
       color: '#808080' 
       }], 
       min: -10, 
       max: 45, 
       startOnTick: false 
      }, 
      tooltip: { 
       formatter: function() { 
        return '<b>'+ this.series.name +'</b><br/>'+ 
        Highcharts.dateFormat('%d-%m-%Y %H:%M', this.x) +'<br/>'+ 
        '<b>' + Highcharts.numberFormat(this.y, 2) + '°C' + '</b>'; 
       } 
      }, 
      legend: { 
       enabled: false 
      }, 
      exporting: { 
       enabled: false 
      }, 
      series: [{ 
       name: 'Temperature', 
       data: (function() { 
       // generate an array of random data 
       var data = [], 
        time = (new Date()).getTime(), 
        i; 

       for (i = 0; i <= 19; i++) { 
        data.push({ 
        x: time + ((i-19) * 1000), 
        y: Number(testlist[i]) 
        }); 
       } 
       return data; 
       })() 
      }] 
      }); 
     }); 
    } 

任何幫助,將不勝感激

+0

你能提供完整的代碼嗎?我認爲你應該在回調數據的地方創建圖表。 –

+0

對我來說它工作正常,http://jsfiddle.net/8hMze/1/(我建議刪除雙重document.ready) –

+0

我已編輯的問題,包括完整的代碼。我做了Pawel的建議,並在回調中創建了圖表,但我仍然被拋出了相同的錯誤。 – benandrews54

回答

0

在其中創建數據數組可以刪除內嵌代碼,並創建圖表另一個變量,其中將包含數據之前剛剛確定。這樣的事情:

webiopi().callMacro("getTempHist", [], arrayTemp); 
function arrayTemp(macro, args, data) { 
    testlist = data.split(" "); 
    // generate an array of random data 
    var data = [], 
     time = (new Date()).getTime(), 
     i; 

    for (i = 0; i <= 19; i++) { 
     data.push({ 
      x: time + ((i-19) * 1000), 
      y: Number(testlist[i]) 
     }); 
    } 

    $(document).ready(function() { 
     Highcharts.setOptions({ 
     global: { 
      useUTC: false 
     } 
     }); 

     var chart; 
     $('#temptracker').highcharts({ 
     chart: { 
      type: 'line', 
      animation: Highcharts.svg, // don't animate in old IE 
      marginRight: 10, 
      events: { 
      load: function() { 

       // set up the updating of the chart each second 
       var series = this.series[0]; 
       setInterval(function() { 
       var x = (new Date()).getTime(), // current time 
        y = Number(temp0); 
       series.addPoint([x, y], true, true); 
       }, 60000); 
      } 
      } 
     }, 
     title: { 
      text: 'Live Temperature' 
     }, 
     xAxis: { 
      type: 'datetime', 
      tickPixelInterval: 100 
     }, 
     yAxis: { 
      title: { 
      text: 'Temperature' 
      }, 
      plotLines: [{ 
      value: 0, 
      width: 1, 
      color: '#808080' 
      }], 
      min: -10, 
      max: 45, 
      startOnTick: false 
     }, 
     tooltip: { 
      formatter: function() { 
       return '<b>'+ this.series.name +'</b><br/>'+ 
       Highcharts.dateFormat('%d-%m-%Y %H:%M', this.x) +'<br/>'+ 
       '<b>' + Highcharts.numberFormat(this.y, 2) + '°C' + '</b>'; 
      } 
     }, 
     legend: { 
      enabled: false 
     }, 
     exporting: { 
      enabled: false 
     }, 
     series: [{ 
      name: 'Temperature', 
      data: data 
     }] 
     }); 
    }); 
} 

如果你仍然有錯誤,請確保你有3.x +版本的Highcharts。

+0

仍然拋出與該更改相同的錯誤。我已經嘗試了獲取我的本地版本的Highcharts v3.0.9並直接從網上獲取Highcharts,但這再次沒有區別。 – benandrews54

+0

好,那麼你只有三種方法:a)你的JS代碼中有一些錯字 - 使用jsLint來確保它沒有問題。 b)你有錯誤的jQuery路徑,或者在Highcharts之前包含了jQuery。 c)在包含Highcharts之前,您正在調用$(..)。highcharts()。 –

+0

我已經在jsLint中查看了我的代碼,但無法看到它的任何錯誤。在我打電話之前,我還包括highcharts.js。我認爲在包含Highcharts之前,jQuery應該包含在內?無論哪種方式,我都嘗試過但都沒有工作。唯一的問題似乎是因爲Highcharts在一個函數裏面,但我不知道如何解決這個問題。 – benandrews54