【问题标题】:manipulate objects from inside a function从函数内部操作对象
【发布时间】:2018-03-10 13:34:36
【问题描述】:

我有问题需要帮助。 我用 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 未定义

当我在 createchart 函数之外创建图表时,它可以工作。 我在这里做错了什么? 如何从函数内部更新对象?

【问题讨论】:

    标签: javascript function chart.js


    【解决方案1】:

    问题是你的变量只存在于你的函数中。做类似的事情

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

    当你调用这个函数时,把 kdchart 粘贴到你可以找到它的地方——在窗口对象上没有别的地方

    【讨论】:

    • 我想我明白了...谢谢...我在这里试过了,它可以工作:jsfiddle.net/pfmd86/fcbcLbn3
    • 现在我有另一个“但是”...我调用该函数在 ajax 调用的成功函数中创建图表...并且我在其中调用了多个“create-chart”功能...
    • 如果涉及多个图表,则创建一些对象来存储图表。如果这个答案已经回答了你的问题,那么请接受它
    【解决方案2】:

    这是因为变量 kdChart 的范围不是全局的。它在执行到该函数内部之前一直处于活动状态,否则它就死了。

    您可以全局创建它,也可以在一个函数上创建该对象并返回,但您必须在需要的任何地方调用该函数,而不必获得相同的引用。

    创建全局对象,使其只有一个副本可供访问。

    【讨论】:

    • 现在很清楚了。我在函数外部调用了变量,现在一切正常!
    猜你喜欢
    • 2017-10-07
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 2012-05-09
    • 2017-12-20
    • 1970-01-01
    相关资源
    最近更新 更多