我試圖將Google Maps的InfoWindow與DOM節點一起使用,並保留InfoWindow交換之間的節點,而無需在DOM之外創建顯式內容存儲。不幸的是,當一個InfoWindow的內容被改變時,以前的內容似乎被破壞了,這是不幸的,因爲它無法切換回前一個節點。更糟糕的是,InfoWindow的content_changed
事件似乎沒有參考先前的內容,因爲MVC事件沒有event
參數。此外,如here所述,引用函數內的內容屬性只引用當前值,而不引用前一個值,因此似乎以前的值對於所有時態和目的都沒有了。使用Google InfoWindow和content_changed保留節點?
例如,假設您想要這樣做,假設我們已經有一張地圖,LatLng位於myLatLng,myLatLng2中。請注意,唯一對shortlived節點的引用已添加到dom中。
document.body.appendChild(document.createElement('div')).id = 'shortlived';
document.getElementById('shortlived').innerHTML = 'I will pass soon...';
var infowindow = new google.maps.InfoWindow();
var marker1 = new google.maps.Marker({
position: myLatlng,
map: map,
title:"Marker1"
});
var marker2 = new google.maps.Marker({
position: myLatlng2,
map: map,
title:"Marker2"
});
google.maps.event.addListener(marker1, 'click', function() {
infoWindow.setContent(document.getElementById('shortlived'));
infowindow.open(map, marker1);
});
google.maps.event.addListener(marker2, 'click', function() {
infoWindow.setContent('Some Text');
infowindow.open(map, marker2);
});
你會發現,如果你點擊MARKER1看到短命的節點,然後如果你點擊MARKER2它消失,但是當您再次單擊標誌1,你不會得到短暫的,你可能會得到'有些文字',或者你什麼也得不到,但無論如何,短暫的消失了。在我的情況,我想最好做到以下幾點:
google.maps.event.addListener(infoWindow, 'content_changed' function(e){
//where e.content is the previous content
document.body.appendChild(e.content)
}
或
google.maps.event.addListener(infoWindow, 'content_changed' function(e){
//No such thing exists
document.body.appendChild(infoWindow.previousContent)
}
這似乎並不像它可以開箱即用,任何想法?再次,我想避免創建一個獨立的商店來保持對DOM節點的單獨引用,而不是DOM中已有的引用。我希望有一些我錯過了。
在此先感謝。
我知道有一些沒有記錄的屬性。我很高興我問了,而不是玩API或無數次檢查它。我不介意沒有記錄的屬性,我們將管理包裝,所以沒什麼大不了的。我會檢查出來,然後接受。謝謝! – asnyder 2011-04-23 00:49:06
好的,你的解決方案工作。有趣的是,我不知道爲什麼我沒有考慮將對象存儲在標記中,當在API的範圍內工作時,人們會如何限制自己到那裏。我可以一直將這個對象存儲在任何構建的屬性中,我想我很害怕Google的API會意外地修改它。感謝您的建議。 – asnyder 2011-04-23 08:47:34
嗯,這可能是對的,Google的代碼會做一些意想不到的事情(關閉源代碼爲:(),這就是爲什麼我提出get和set方法,因爲那裏有更多的API合約。很高興爲你效勞! – nrabinowitz 2011-04-23 14:01:41