0

次のようにGoogle Maps Apiを処理するオブジェクトを作成しようとしています:

function GoogleMap(container, mapOptions) {
    this.Container = container;
    this.Options = mapOptions;
    this.Map = new google.maps.Map(document.getElementById(this.Container), this.Options);

    // Direction
    this.DirectionService = new google.maps.DirectionsService();
    this.DirectionRenderer = new google.maps.DirectionsRenderer();
    this.DirectionRenderer.setMap(this.Map);
    this.DirectionId = 0;
    this.DirectionResponse = new Array();
    this.DrawDirectionDriving = drawDirectionDriving;
}

drawDirectionDriving 関数は次のようになります。

function drawDirectionDriving(start, end) {
  var request = {
    origin: start,
    destination: end,
    travelMode: google.maps.TravelMode.DRIVING
  };

  this.DirectionService.route(request,
    function (response, status) {
      if (status == google.maps.DirectionsStatus.OK) {
        this.DirectionRenderer.setDirections(response);
        this.DirectionResponse[this.DirectionId] = response;
        this.DirectionId++;
      }
      else {
        alert("Error during drawing direction, Google is not responding...");
      }
    }
  );
}

そしてどこかで、私はこのようなオブジェクトを使用しています:

var myGoogleMap;

function MapInit() {
    myGoogleMap = new GoogleMap("divMap", myMapOptions);
    myGoogleMap.DrawDirectionDriving("İstanbul", "Ankara");
}

ブラウザに Google マップが表示されます。オブジェクトの作成には問題はありませんが、DrawDirectionDriving 関数でエラーが発生します。

この行にブレークポイントを作成すると: " myGoogleMap.DrawDirectionDriving("イスタンブール", "アンカラ");" 「DirectionRenderer」は構築されているようですが、この行の後 (「Draw」メソッドの後)、DirectionRenderer オブジェクトは null (未定義) のように見えるため、「setDirections プロパティを取得できませんでした。それは null bla bla です...」のようなエラーになります。

手を貸していただけますか?

前もって感謝します...

4

1 に答える 1

2

thisキーワードrouteは、コールバック関数内の何かを指しています。そのプロパティは/にDirectionRenderer解決され、そこからプロパティを取得すると例外が発生します。nullundefinedsetDirections

逆参照変数を使用します。

function drawDirectionDriving(start, end) {
  var request = {
    origin: start,
    destination: end,
    travelMode: google.maps.TravelMode.DRIVING
  };
  var that = this;

  this.DirectionService.route(request,
    function (response, status) {
      if (status == google.maps.DirectionsStatus.OK) {
        that.DirectionRenderer.setDirections(response);
        that.DirectionResponse[this.DirectionId] = response;
        that.DirectionId++;
//      ^^^^ points to the GoogleMap instance
      }
      else {
        alert("Error during drawing direction, Google is not responding...");
      }
    }
  );
}
于 2012-08-06T22:12:28.193 に答える