2013-12-20 100 views
0

你好,我正試圖將谷歌地圖與Knockout腳本綁定。 幾乎所有的工作,但我不能強迫infowindows出現在事件。 沒有敲出我的代碼的作品,但它沒有。 下面我的js代碼:InfoWindow沒有顯示

var infowindow; 
function point(name, lat, long) { 
    this.name = name; 
    this.lat = ko.observable(lat); 
    this.long = ko.observable(long); 
    var marker = new google.maps.Marker({ 
     position: new google.maps.LatLng(lat, long), 
     title: name, 
     map: map, 
     draggable: true 
    }); 
//if you need the poition while dragging 
google.maps.event.addListener(marker, 'drag', function() { 
    var pos = marker.getPosition(); 
    this.lat(pos.lat()); 
    this.long(pos.lng()); 
}.bind(this)); 

//if you just need to update it when the user is done dragging 
google.maps.event.addListener(marker, 'dragend', function() { 
    var pos = marker.getPosition(); 
    this.lat(pos.lat()); 
    this.long(pos.lng()); 
}.bind(this)); 
google.maps.event.addListener(marker, 'mouseover', function() { 
    infowindow = new google.maps.InfoWindow({ content: "empty" }); 
    console.log("mouseover"); 
    infowindow.setContent(this.title); 
    infowindow.open(map, this); 

}.bind(this)); 


} 

var map = new google.maps.Map(document.getElementById('googleMap'), { 
    zoom: 5, 
    center: new google.maps.LatLng(55, 11), 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}); 

var viewModel = { 
    points: ko.observableArray([ 
     new point('Test1', 55, 11), 
     new point('Test2', 56, 12), 
     new point('Test3', 57, 13)]) 

}; 
function addPoint() { 
    viewModel.points.push(new point('a', 58, 14)); 
} 
ko.applyBindings(viewModel); 

現在我的問題:

是簡單的方法,使它的工作原理。如果是的話,任何人都可以建議我在哪裏尋找它?

回答

1

可能是您使用this

添加var self = this;作爲點函數內的第一行&使用self來引用點內的屬性。

在鼠標懸停事件中,這是否引用標記,地圖或視圖模型?如果拖動事件正確設置了值,那麼這就是點視圖模型,在這種情況下,在您稱爲this.title的鼠標懸停事件中。沒有標題...

function point(name, lat, long) { 
    var self = this; 
    self.name = name; 
    self.lat = ko.observable(lat); 
    self.long = ko.observable(long); 
    var marker = new google.maps.Marker({ 
     position: new google.maps.LatLng(lat, long), 
     title: name, 
     map: map, 
     draggable: true 
    }); 
    //if you need the poition while dragging 
    google.maps.event.addListener(marker, 'drag', function() { 
     var pos = marker.getPosition(); 
     self.lat(pos.lat()); 
     self.long(pos.lng()); 
    }.bind(this)); 

    //if you just need to update it when the user is done dragging 
    google.maps.event.addListener(marker, 'dragend', function() { 
     var pos = marker.getPosition(); 
     self.lat(pos.lat()); 
     self.long(pos.lng()); 
    }.bind(this)); 
    google.maps.event.addListener(marker, 'mouseover', function() { 
     infowindow = new google.maps.InfoWindow({ content: "empty" }); 
     console.log("mouseover"); 
     infowindow.setContent(marker.title); 
     infowindow.open(map, this); 
    }.bind(this)); 
} 
+0

你說得對。沒有這個.title。在更改爲this.name並使用console.log()後,我可以看到它顯示出好名字,但仍然沒有infoWindow。所以知道我確定這個問題在這一行:infowindow.open(map,this); – szpic