我将数据绑定到一个 div,然后将其设置为 InfoWindow 的内容。单击地图上的标记时,我正在更改绑定的 observable,这会更新信息窗口中的内容。在关闭信息窗口之前,所有这些都可以正常工作。谷歌地图从 DOM 中删除了信息窗口,以及我的绑定了它的 div。重新打开信息窗口会导致其内容被冻结在关闭时的状态。
对 observable 的任何更改都不再更新 ui,包括使用 valueHasMutated。我试过只是重置信息窗口的内容并重新绑定,但 JQuery 元素仍然存在并且我得到了重复的内容。我也尝试过使用 cleanNode 和重新绑定,但也得到了重复的内容。
我也绑定的div:
<div id="placeTmpl" data-bind="with: place">
<h3>
<a data-bind="text: name, attr: { 'href': detailsUrl($data) }"></a>
</h3>
</div>
谷歌地图信息窗口:
window.infoWindow = new window.google.maps.InfoWindow({
content: ''
});
window.infoWindow.setContent($('#placeTmpl')[0]);
事件监听器和更新 observable
window.google.maps.event.addListener(marker, "click", function() {
window.viewModel.openInfoWindow(marker, data);
});
self.openInfoWindow = function (marker, data) {
for (var i = 0; i < self.places().length; i++) {
if (self.places()[i].placeId == data.PlaceId) {
self.place(self.places()[i]);
}
}
window.infoWindow.open(map, marker);
};
就像我说的,这一切都很好,直到信息窗口关闭。我只是在寻找一种方法来强制淘汰赛再次开始更新 ui 或在信息窗口关闭时清除并重新绑定。