0

私は、タブレットで主に使用される小さな個人プロジェクト用にjavascriptを使用してカスタムオブジェクトを作成しています(ただし、ラップトップでも使用されます)。このオブジェクトは、Googleマップ、GPSトラッキング、およびその他の手順を処理します。オブジェクトの内部では、オブジェクトの外部から呼び出されるカップル関数を定義しました(enableGps, disableGps)。内部enableGps外部error_handlerと内部オブジェクト関数(this.handleGps​​)を使用してgpsデータ(緯度、経度、精度など)を処理しながら追跡を開始します。this.handleGpsマップ上の実際のマーカーを更新するために関数を呼び出そうとしましthis.updateGpsMarkerたが、例外がスローされました。

Uncaught TypeError:オブジェクト[オブジェクトウィンドウ]にはメソッド'updateGpsMarker'がありません

どうすれば電話できますthis.updateGpsMarkerthis.handleGps?外部から呼び出す関数として使用できる必要があることに注意してくださいthis.updateGpsMarker(長い説明)私がやろうとしていることをより明確にするために、コードをスローします。

function RouteAssistant(mapCanvas, mapOptions)
{
    // Google mapping and geocoding
    this.map = new google.maps.Map(mapCanvas, mapOptions);
    this.geo = new google.maps.Geocoder();
    this.gpsMarker = null;

    this.updateGpsMarker = function(lat, lon)
    {
        console.log("Updating GPS marker");
        if (this.gpsMarker == null)
        {
            console.log("GPS Marker not created. Creating GPS marker at " + lat + "," + lon);
            this.gpsMarker = new google.maps.Marker(
            {
                position: new google.maps.LatLng(lat,lon),
                map: this.map,
                title: "I am here!"
            });
            this.map.setCenter(new google.maps.LatLng(lat,lon));
        }
        else
        {
            console.log("GPS Marker created. Updating GPS marker to " + lat + "," + lon);
            this.gpsMarker.setPosition(new google.maps.LatLng(lat,lon));
        }
    }

    // GPS and tracking
    this.gpsProcess = null;
    this.enableGps = function (handle_errors)
    {
        if (this.gpsProcess == null) {
            console.log("Enabling GPS");
            this.gpsProcess = navigator.geolocation.watchPosition(this.handleGps, handle_errors);
        }
    };
    this.disableGps = function()
    {
        if (this.gpsProcess != null)
        {
            console.log("Disabling GPS");
            navigator.geolocation.clearWatch(this.gpsProcess);
            this.gpsProcess = null;
        }
    };
    this.handleGps = function(position)
    {
        this.updateGpsMarker(position.coords.latitude, position.coords.longitude);
    }
}
4

1 に答える 1

0

おそらく、明示的なモジュロパターンのようなものを使用してクリーンなオブジェクトを作成し、すべての関数を入れることができます。

 var routeAssistant = function(mapCanvas, mapOptions) {

     var map = new google.maps.Map(mapCanvas, mapOptions).
     updateGpsMarker = function(lat, long) {
         //You can directly access 'map' here.
     };
     return {
      updateGpsMarker : updateGpsMarker
     }; 
 };

その後、次のようにしてこれを使用できます

  var myObject = new routeAssistant(mapCanvas, mapOptions);
  myObject.updateGpsMarker(latitude,longtitude);   
于 2012-07-10T01:16:51.837 に答える