2017-09-28 55 views
0

我遇到問題並需要一些幫助。 我用chart.js創建圖表,我想用函數更新它們。從函數內部操作對象

我有以下設置:

function createchart(obj){ 
var kdChart = new Chart(kdchart, { 
      type: 'line', 
      data: data, 
      options: options 
     }); 

現在我嘗試用第二個功能是這樣來更新圖表:

function updatechart(){ 
    //collect new data... 
    kdChart.data.labels = datepoints; 
    kdChart.data.datasets[0].data = kdata; 
    kdChart.data.datasets[1].data = ddata; 
    kdChart.update(); 
} 

現在我得到錯誤

TypeError: kdChart.data is undefined

當我在創建圖表的功能之外創建圖表。 我在這裏做錯了什麼? 如何更新函數內的對象?

回答

1

問題是你的變量只能在你的函數中生存。這樣做

function createchart(...) { 
    var kdchart = ... 
    ... 
    return kdchart; 
} 

而當你的地方調用這個函數去粘kdchart在那裏你可以找到它 - 窗口對象上沒有別的地方

+0

我想我知道了...謝謝... 我在這裏嘗試過的工作原理: https://jsfiddle.net/pfmd86/fcbcLbn3/ – pfmd86

+0

現在我還有一個「而是」 ... 我調用函數來創建ajax調用的成功函數內的圖表...並且我在該函數內部調用多個「創建圖表」... – pfmd86

+0

如果涉及多個圖表,則創建一些對象以存儲圖表。如果這個答案已經回答了你的問題,那麼請接受它 –

0

正是由於可變kdChart的範圍不是全球。它是活着的,直到執行在該函數內部,否則它就會死亡。

您既可以全局創建該對象,也可以將該對象放在一個函數旁邊並返回,但必須在需要的地方調用該函數,而不是必須獲得相同的引用。

創建全局對象,以便它只有一個副本可以訪問。

+0

現在很清楚。我在函數外部調用變量,現在一切正在運行! – pfmd86