1
這可能很簡單,但對於我的生活,我無法弄清楚爲什麼這不是正確綁定。在Backbone.js中綁定一個回調
在我的主要觀點:
initMap: function() {
forge.logging.log('... Initializing map');
var createMap = function(position) {
var latLng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude, true);
var options = {
zoom: 15,
center: latLng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
this.map = new google.maps.Map(document.getElementById('map_canvas'), options);
this.addMarkers();
};
_.bind(createMap, this);
forge.geolocation.getCurrentPosition(createMap);
forge.logging.log('Created map ...');
},
addMarkers: function() {
alert('addMarkers');
forge.logging.log('... Adding markers');
var tempData = ["xxxxxxxx",
"xxxxxxx",
"xxxxxxxx"];
_.each(tempData, function(addr){
google.maps.Geocoder.geocode({'address': addr}, function(res, status){
if (status == google.maps.GeocoderStatus.OK) {
new google.maps.Marker({
map: this.map,
position: res[0].geometry.location
});
}
});
});
forge.logging.log('Added markers ...');
}
出於某種原因,this.addMarkers()似乎並沒有被調用。我猜這是因爲這沒有被正確綁定。但地圖顯示完美。
我應該如何將它綁定到我的createMap回調函數?
確定這在initMap本身中是正確的嗎?一般來說,我建議在iWebInspector(http://www.iwebinspector.com/)或Chrome之類的東西上進行調試,這樣你就可以正確地檢查這個... –
是的,只是檢查。這在initMap中是正確的,但是當createMap被調用時,它被設置爲窗口對象。 – James
如果您將所有僞造*調用並以直接的靜態Web應用程序(使用navigator.geolocation而不是forge.geolocation)運行代碼,它是否按預期工作? –