2

マネージャーnokia.places.search.manager (HERE API) のreverseGeoメソッドを使用して、座標に関する情報を取得しています。あるポイントの情報を表示するとき、私の場合はうまくいきます。しかし、複数のポイントがある場合、すべてのポイントが最後のポイントの情報を取得します。

実際、提供されている例で行われているように、 onCompleteメソッド内で住所情報を表示するために infobubble を使用していません。

すべてのマーカー (InfoBuble を埋め込んだ nokia.maps.map.Marker の拡張) をキー/値のグローバル変数内に保存しました。onCompleteメソッド内で、右のマーカーを更新したいと思います。

以下は、検索サービスを呼び出す方法です。

searchManager.reverseGeoCode({
latitude: lat,
longitude: lng,
onComplete: function(data, status, requestId){
    processResults(data, status, requestId, myID);
    }
});

ここで、myIDは正しいマーカーを取得してアドレス情報で更新できるようにする値です。

よろしく

4

2 に答える 2

1

これは、すぐに呼び出される関数式を使用して、任意の JavaScript コールバックで行うことができます。

コードは次のようになります。

searchManager.reverseGeoCode({
    latitude: lat,
    longitude: lng,
    onComplete: (function(localID) {
        return function(data, status, requestId) {
            processResults(data, status, requestId, localID);
        };
    })(myID)
});

この例を理解するには、クロージャーと上記の即時呼び出し関数式の構文をよく理解する必要があります。

于 2013-08-12T15:58:41.693 に答える
1

私は今日似たようなことをしましたが、それはかなりあいまいです。Andrzej Duś が提案したのと同じように、コールバック関数のスコープに問題があります。コールバックのパラメーターは、コールバックが実行されるときに評価されます。これが、最後に渡されたパラメーターで常に実行される理由です。囲んでいるループ内の特定の反復のパラメーター (つまり、myID) を使用して実行するには、コールバック関数が必要です。

これを行う 1 つの方法は、次のように新しい関数を作成することです。

var f = new Function('myCallbackFunction(' + myID + ')');
exampleExternalFunction(f);

または、あなたの例を使用して、

var f= new Function('data', 'status', 'requestId',
    'processResults(data, status, requestId,' + myID + ')'

... other code ...
onComplete: f
...

あなたの場合、上記はまったく正しくないかもしれません。JavaScript の "new Function()" の詳細を調べて、これをもう少しよく理解してください。

于 2015-02-19T02:39:41.987 に答える