geocoder.geocode javascript里面的方法

时间:2014-10-12 21:06:45

标签: javascript google-maps

我想在geocoder.geocode的de函数内添加一个方法,但是给我看一个像这样的错误 TypeError:this.updateMarkerPosition不是函数。 该方法越位于功能但内部没有,我不知道为什么。

这是代码

     var mapa = {
  address : "",
  geocoder : "",
  my_imagen : "",
  iniciarMapa : function(){

    this.geocoder = new google.maps.Geocoder();
    this.my_imagen = './images/edicion.png';  
  latLng = new google.maps.LatLng(-33.02511643971983,-71.54983196508181);
  map = new google.maps.Map(document.getElementById('map1'), {
    zoom:15,
    center: latLng,
    mapTypeId: google.maps.MapTypeId.ROADMAD  });

// CREACION DEL MARCADOR  
    marker = new google.maps.Marker({
    position: latLng,
    title: 'Arrastra el marcador si quieres moverlo',
    map: map,
    icon: this.my_imagen,
    draggable: true
  });


  },
   updateMarkerPosition : function(latLng) {
      document.form_mapa.longitud.value ="latLng.lng()";
      document.form_mapa.latitud.value = "latLng.lat()";
    },

  codeAddress : function() {
        this.address = document.form_mapa.direccion.value;
        if (this.address == ""){
            alert('Debe ingresar una dirección');
            return;
        }
      else
        {

          var status = this.geocoder.geocode( { 'address': this.address}, function(results, status) {
            this.updateMarkerPosition();

          });
          console.log(status);



        }

      }




}

1 个答案:

答案 0 :(得分:0)

geocoder.geocode的回调函数将在全局范围内执行,其中this将引用全局window - 对象,而不是mapa

改为呼叫mapa.updateMarkerPosition();

当你想要更灵活并且不想硬编码对象的名称时,创建一个指向对象的闭包:

  codeAddress : function() {
     //create reference to the object
     var that = this;

     this.address = document.form_mapa.direccion.value;
        if (this.address == ""){
            alert('Debe ingresar una dirección');
            return;
        }
      else
        {

          var status = this.geocoder.geocode( { 'address': this.address}, function(results, status) {
            //use the reference
            that.updateMarkerPosition();

          });
          console.log(status);
        }
      }