情報ウィンドウのコンテンツとして設定しているdivにデータバインディングしています。マップ上のマーカーがクリックされると、バインドされたオブザーバブルが変更され、情報ウィンドウのコンテンツが更新されます。情報ウィンドウが閉じるまで、これはすべて正常に機能します。Googleマップは、バインディングが含まれているdivとともに、情報ウィンドウをDOMから削除します。情報ウィンドウを再度開くと、コンテンツが閉じたときの状態でフリーズします。
valueHasMutatedの使用を含め、オブザーバブルへの変更はUIを更新しなくなりました。情報ウィンドウのコンテンツをリセットして再バインドしようとしましたが、JQuery要素がまだ存在し、コンテンツが重複しています。また、cleanNodeと再バインドを使用してみましたが、それで重複コンテンツも取得しました。
私もバインドしているdiv:
<div id="placeTmpl" data-bind="with: place">
<h3>
<a data-bind="text: name, attr: { 'href': detailsUrl($data) }"></a>
</h3>
</div>
Googleマップインフォウィンドウ:
window.infoWindow = new window.google.maps.InfoWindow({
content: ''
});
window.infoWindow.setContent($('#placeTmpl')[0]);
イベントリスナーと更新オブザーバブル
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の更新を再開するか、情報ウィンドウを閉じたときにクリアして再バインドする方法を探しています。