私は、「OData」(URLサービスからリモートデータにアクセスする)を処理することを意味する、いくつかのデータ処理概念を含む1つの関数を使用しています。
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();
}
}
}
}
},
以下のprocessData関数を参照してください
_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 からデータを取得するのにしばらく待たなければならないので、ここで "done" 関数でコールバック関数を使用してから、グラフの描画関数を呼び出しただけです。しかし、それ以外の場合は、リモート データにアクセスする必要がないため、描画関数を直接呼び出す必要があります。リモートデータ処理の場合は、データを取得するまで待つ必要があり、その後チャートを描画するだけですが、他の場合はこの条件は必要ありません.
チャートの「Draw」関数を呼び出すbindTo関数。以下のjQuery関数のように、コールバックが完了するまで待機/実行するjquery関数が必要です。
http://api.jquery.com/jQuery.when/
以下のコードのように試しました。
$.when(this.bindTo()).then(function(e) {
chart.Draw();
});
bindTo のコールバック関数が完了するまで待機しませんでした。「odata」を処理する直前に呼び出された draw 関数
そのため、bindto関数は、bindto関数内にあるコールバック関数が完了するまで待つ必要があり、その後、draw関数を呼び出すだけで済みます。