我正在使用一个包含一些数据处理概念的函数。这意味着处理“OData”(从URL -service访问远程数据)。
bindTo: function () {
if(!sf.util.isNullOrUndefined(this.model.Series))
{
for (var i = 0; i < this.model.Series.length; i++) {
if (sf.util.isNullOrUndefined(this.model.Series[i].Visibility))
this.model.Series[i].Visibility = 'visible';
var series = this.model.Series[i];
if (sf.util.isNullOrUndefined(series.Points))
series.Points = [];
if (series.dataSource) {
if (series.dataSource.data instanceof sf.DataManagar) {
this._processOData(series);
} else if (series.dataSource.data != null && series.dataSource.data.length > 0) {
this._processJsonData(series.dataSource.data, series);
this.Draw();
}
}
}
}
},
请参考下面的processoData函数
_processOData: function(series) {
var chart = this;
var queryPromise = series.dataSource.data.executeQuery(series.dataSource.query);
queryPromise.done(function (e) {
chart._processJsonData(e.result,series);
**chart.Draw();**
});
},
我们必须等待一段时间才能从URL获取数据,所以我在这里使用了回调函数“完成”功能,然后我只调用了绘图功能。但在其他情况下,不需要访问远程数据,这意味着我需要直接调用绘图函数。如果它是一个远程数据处理我需要等到我得到数据然后才打算绘制图表,但在其他情况下我不需要这个条件。
所以bindTo函数调用图表的“绘图”功能。我需要一些jquery函数,它等待/执行,直到回调完成,如下面的jQuery函数。
http://api.jquery.com/jQuery.when/
我试过下面的代码。
$.when(this.bindTo()).then(function(e) {
chart.Draw();
});
但它没有等到bindTo中的回调函数完成。在处理“odata”之前直接调用draw函数
所以 bindto 函数需要等到bind函数内部的回调函数才能完成,然后才需要调用draw函数。