0

私は、「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関数を呼び出すだけで済みます。

4

0 に答える 0