【问题标题】:Multiple Google Charts on one page - Loading Library efficiently?一页上有多个 Google 图表 - 有效地加载库?
【发布时间】:2014-11-03 14:38:30
【问题描述】:

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

我的问题有点不同。如果我想要按钮,客户端,当点击时,生成一个谷歌图表。我是否需要每次调用“google.load(....)”,然后也需要 setOnLoadCallback,或者是否有某种方法可以将其加载一次,然后从那时起使用已经加载的对象?

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

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

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

【问题讨论】:

    标签: javascript charts google-visualization


    【解决方案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);
    }
    

    【讨论】:

    • 但是 setOnLoadCallback 不会每次“.load”调用只调用一次,即一旦加载?
    • 不,您可以随时调用它。不要被setOnLoadCallback 中的OnLoad 这个词所打扰。最重要的术语是CallbackIn computer programming, a callback is a piece of executable code that is passed as an argument to other code, which is expected to call back (execute) the argument at some convenient time. The invocation may be immediate as in a synchronous callback or it might happen at later time, as in an asynchronous callback. 另请阅读Use google.setOnLoadCallback multiple times?
    • 啊,好吧,那是我缺少的部分。我以为它只调用一次回调,有点像说“onclick=myFunction()”,每次调用只会被点击一次,我认为每次加载都会调用一次,但我会试试这个,看看会发生什么。
    猜你喜欢
    • 1970-01-01
    • 2012-05-04
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    相关资源
    最近更新 更多