一页上有多个Google图表 - 有效加载库?

时间:2014-11-03 14:38:30

标签: javascript charts google-visualization

我见过很多人问过在一个页面上有多个Google Charts,答案总是“你的html / js是错误的”,或者“只是将它们全部添加到setOnLoadCallback中调用的一个函数中”。

我的问题有点不同。如果我想要按钮,客户端,点击时生成Google图表,该怎么办?我是否需要每隔时间调用“google.load(....)”,然后再调用setOnLoadCallback,或者是否有某种方法将其加载到ONCE,然后从那一点开始直接使用已加载的对象?

我唯一能想到的是存储一些在第一个google.setOnLoadCallback上更新的标志,如果设置了标志,请不要再次加载它,但如果有人快速点击几个按钮,他们都会发出了“加载”函数调用。

基本上我想要一个我可以调用的泛型函数(我会自己创建)但是我不希望每次都调用google.load这个函数,它只是感觉非常低效。

我如何有效地解决这个问题?

1 个答案:

答案 0 :(得分:1)

确实应该每页加载一次调用<{google.load。您不必将所有图表放入一个函数中,您可以创建多个函数并随时调用它们,如下所示:

google.load('visualization', '1.1', {
    packages: ['corechart', 'controls'],
    language: 'en'
});

function drawFirstVisualizations() {
    chart1 = new google.visualization.ChartWrapper({
        'chartType': 'LineChart',
    });

    chart2 = new google.visualization.ChartWrapper({
        'chartType': 'LineChart',
    });

    chart1.draw();
    chart2.draw();
}

function drawSecondVisualizations() {
    chart3 = new google.visualization.ChartWrapper({
        'chartType': 'LineChart',
    });

    chart4 = new google.visualization.ChartWrapper({
        'chartType': 'LineChart',
    });

    chart3.draw();
    chart4.draw();
}

google.setOnLoadCallback(drawFirstVisualizations);

function functionBeingCalledLater() {
    google.setOnLoadCallback(drawSecondVisualizations);
}