2017-09-28 54 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