1

私は次のコードを使用しています:

function eventListenerTest(event) {
    if (document.getElementById('gem_cvo_select_list')) {
        var address;
        $.getJSON(url, function (data) {
            address = data.rows[0];
            alert("This gets executed afterwards");
        });
        alert("This gets executed first");
        event.infoWindowHtml = "<b>Address: </b>" + address;
    }
}

問題は、「address」変数が infoWindow で使用された後に $.getJSON 関数が実行されることです。次のようにコードを変更しました。

function eventListenerTest(event) {
    if (document.getElementById('gem_cvo_select_list')) {
        var address;
        $.getJSON(url, function (data) {
            address = data.rows[0];
            event.infoWindowHtml = "<b>Address: </b>" + address;
        });
    }
}

この方法では「イベント」オブジェクトにアクセスできないようです (Google マップの情報ウィンドウには何も表示されません)。JSON内の関数に「イベント」を渡すことができるはずだと考えましたが、これを達成する方法がわかりません。

4

2 に答える 2

0

これを試して:

function eventListenerTest(event, callback) {
    if (document.getElementById('gem_cvo_select_list')) {
        var address;
        $.getJSON(url, function (data) {
            address = data.rows[0];
            event.infoWindowHtml = "<b>Address: </b>" + address;
            callback();
        });
    }
}

それで:

eventListenerTest(event, function(){
     // you will use updated event object here
});
于 2012-10-07T11:03:57.950 に答える
0

$.proxy メソッドを使用して、実行されるコールバック関数が Ajax 呼び出しを作成する関数のコンテキストを保持するようにする必要があります。

更新された Javascript:

function eventListenerTest(event) {
    if (document.getElementById('gem_cvo_select_list')) {
        var address;
        $.getJSON(url, $.proxy(function (data) {
            address = data.rows[0];
            event.infoWindowHtml = "<b>Address: </b>" + address;
        },this));
    }
}

詳細: http://api.jquery.com/jQuery.proxy/

于 2012-10-07T11:14:24.323 に答える