1

私は現在、グーグルマップAPIv3を使用しているウィジェットを構築しています。セットアッププロセスは次のようになります。

  1. jQueryを挿入します
  2. HTML構造を挿入します
  3. googlemaps apiを挿入します(これは、実際のmain.jsをロードするブートストラップ.jsファイルのみをロードします)&&マップデータをロードします
  4. googlemaps apiが読み込まれるとすぐに、基本的な地図を設定します
  5. マップデータがロードされたらすぐに、それをマップに適用します(マーカーの設定など)

私の問題は、GoogleAPIの読み込みが完了したときに起動するようにコールバックメソッドを設定できることです。データの読み込みを開始し、マップが読み込まれ、データリクエストが成功(または失敗)したらすぐにデータを適用したいと思います。jQueryのDeferredObjectを使用していますが、コードは次のようになります。

主要部分:

jQuery.when(
    fn.getData()
)
.then(function(resolvedArgs) {
    gmap.setData(resolvedArgs['data']);
    gmap.addMarkerOverlay();
})
.fail(function(jqXHR, textStatus) {
    var message = textStatus + ': loading data';
    fn.showInfoBox(message);
});

GoogleMapsパート(同一生成元ポリシーの回避策、これは外部スクリプトのロードを担当する関数からの基本的な戻り値です):

return jQuery.Deferred(function(deferred) {
    var scriptTag = document.createElement('script');
    scriptTag['type'] = 'text/javascript';
    scriptTag['src'] = 'googlemapsapiurl&callback=setupGoogleMap';
    scriptTag['async'] = true;
    document.getElementsByTagName("head")[0].appendChild(scriptTag);
    scriptTag['onload'] = scriptTag['onreadystatechange'] = function() {
        if (!this.readyState || this.readyState === "loaded" || this.readyState === 'complete') {
            deferred.resolve();
        }
    };
}).promise();

2番目のGoogleMapsパート:

var setupGoogleMap = function() {
    jQuery('.container').trigger('googleMapsReady');
};

と...

jQuery('.container').on('googleMapsReady', function(event) {
    fn.setupGoogleMap();
});

google apiリクエストをどこに置くかわかりません。これは、google側での2段階の読み込みプロセスのようなものだからです。たぶん私はjQueryDeferredのデフォルトの成功resolve()を防ぐことができます-代わりにgoogleapiコールバックメソッドでDeferredを呼び出して解決しますか?何か案は?

4

0 に答える 0