2012-05-09 41 views
3

我有一個視圖,其中包含一個谷歌地圖可通過this.map在視圖範圍內訪問。世界上一切都很好。我如何綁定谷歌地圖geocoder.geocode()回調函數

接下來,我想通過更新在我看來事件的地圖位置。要做到這一點,我需要文本輸入,使用google.maps.Geocoder.geocode(),然後通過更新位置:

setMapLocation:功能(位置){

_.bind(this.setMapLocationCallback, this); 

    console.log(this); 

    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({'address': location}, this.setMapLocationCallback); 

}, 

的console.log(此)這裏表明我的觀點的範圍,與this.map正常訪問。請注意,我的回調明確綁定到這個位置。這裏的回調:

setMapLocationCallback: function (results, status) { 

    console.log('this in the callback'); 
    console.log(this); 

    if (status == google.maps.GeocoderStatus.OK) { 
     this.map.setCenter(results[0].geometry.location); 
     var marker = new google.maps.Marker({ 
      map: this.map, 
      position: results[0].geometry.location 
     }); 
     this.mapCanvas.css({visibility: 'visibile'}); 
    } else { 
     this.mapCanvas.css({visibility: 'hidden'}); 
    } 
}, 

的問題是,回調的console.log內(本)表明的作用範圍是Window對象即使我約束,明確視圖對象的這範圍。

我需要在回調中訪問this.map,因爲我可能在一個頁面上有多個地圖,需要區分我正在談論的是哪一個。

如何綁定這個回調到合適的範圍是什麼?或者,有沒有更好的方法來做到這一點?

我正在使用backbonejs和underscorejs,但這應該是一個相當普遍的問題。

由於提前, 大衛

回答

5

嘗試

geocoder.geocode({'address': location}, this.setMapLocationCallback); 

使用call()改變,所以你可以改變內部setMapLocationCallback

var _this = this; 
geocoder.geocode({'address': location}, function(result, status) { 
    _this.setMapLocationCallback.call(_this, result, status); 
}); 

MDN Documentation about call() function

+0

this範圍這就是訣竅!謝謝你,先生!我已經聽到這樣的事情被「直覺」語法JS的未來版本的傳聞來處理。期待看到如何發揮。 –

相關問題