【问题标题】:Google Charts API: adding arguments to existing callbackGoogle Charts API:向现有回调添加参数
【发布时间】:2013-03-21 02:12:20
【问题描述】:

我有一个页面,其中包含从 Google 电子表格生成的许多图表。

典型代码如下所示:

var url = "http://my.googlespreadsheet.com/tq?argumentshereblahblahblah";
// create and send off the query
var query = new google.visualization.Query( url );
query.send( handleQueryResponse );

function handleQueryResponse(response) {
    // omitted code to handle errors
    // create new chart object, specify location in page
    var chart = new google.visualization.BarChart( document.getElementById('chart-' + i));
    // draw chart
    chart.draw( data, {} );
}

由于我在页面上有几个图表,我想以编程方式创建它们,而不必具有看起来相同的 x 函数,只是图表位置和标题不同。我已经设置了一个电子表格引用数组,我遍历这些引用,将每个引用传递给运行上述代码的函数:创建查询、发送查询、处理响应。我想要做的是向 handleQueryResponse 回调传递一个额外的参数,以便我可以指定图形应该在页面上的位置。不过,我无法找到将变量放入 handleQueryResponse 的方法。如果我这样做:

// array of spreadsheet refs
var quArr = ['gid=2&range=D2%3AE10&headers=-1','gid=2&range=D15%3AE19&headers=-1', (etc.) ];
var base_url = "http://my.googlespreadsheet.com/tq?";
var i; // iterator

// iterate through the spreadsheet refs and send off the queries for each
for (i = 0; i < quArr.length; i++){
    var url = q_base + quArr[i];
    var query = new google.visualization.Query( url );
    query.send( handleQueryResponse );
}

// deal with the responses
function handleQueryResponse(response) {
    // omitted code to handle errors
    // get the data from the response
    var data = response.getDataTable();
    // create new chart object, specify location in page
    // anchors in the page correspond to where the chart should go
    var chart = new google.visualization.BarChart( document.getElementById('chart-' + i));
    chart.draw( data, { extra args } );
}

...返回响应的异步特性意味着迭代器与我发送请求时的值不同。

来自API docs的额外信息:

发送(回调)

将查询发送到数据源。 callback 应该是数据源响应时将调用的函数。回调函数将接收 google.visualization.QueryResponse 类型的单个参数。 返回值:无

问题:

1) API 文档中关于 query.send(callback) 的内容是否本质上意味着我无法更改回调以获取额外的参数?

2) 谁能提出另一种解决此问题的方法?

【问题讨论】:

    标签: callback argument-passing google-visualization


    【解决方案1】:

    刚刚找到了我自己问题的答案 - 哇哦!应该坚持久一点。 ;)

    如果它对其他人有用,我创建了一个新函数来执行查询并为回调使用了一个闭包。这是重组后的代码:

    for (var i = 0; i < quArr.length; i++){
        var url = q_base + quArr[i];
        var query = new google.visualization.Query( url );
        doQuery(query, i);
    }
    
    function doQuery(q, it){
        q.send( function(response){
            // omitted error handling code
            var data = response.getDataTable();
            var chart = new google.visualization.BarChart( document.getElementById('chart-' + it));
            chart.draw( data, { other args } );
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2012-10-25
      • 2015-12-27
      • 2015-06-05
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      相关资源
      最近更新 更多