После взлома с проблемами распространения DOM и распространения событий в течение всего дня я пришел к последнему из вопросов, с которыми я пытался справиться с использованием кластера-маркера.Кластер кластеров Google Maps: обработка вложенных кликов
В настоящее время я прикрепляю обработчик клика к элементу DOM, чтобы изменить состояние для одного инфобокса, используя этот код.
//google infobox plug in
var boxText = document.createElement("div");
boxText.style.cssText = "border: 1px solid #E0E0E0; margin-top: 8px; background: white; padding: 5px; border-radius: 7px;";
boxText.innerHTML = contentString;
//when infowindow is clicked, open view...
google.maps.event.addDomListener(boxText, 'click', (function (marker) {
return function() {
$state.go("comments", {
"shoutId": activeId
});
}
})(marker));
Это работает отлично, как и ожидалось, для одного окна информационного окна. Но когда я вызываю getMarkers в кластере и делаю практически то же самое, результаты не совпадают.
В функции getMarker я использую цикл for для итерации через кластер и добавляю инфобокс с замкнутым контентом внутри него. Я мог бы применить обработчик событий boxText для всего окна, но это не дало бы мне обработчик событий на каждом отдельном раздел маркерного ..
Это код, я использую внутри кластера клик обработчика событий маркеров
google.maps.event.addListener(mc, 'click', function (cluster, $event) {
var content = '';
var clickedMarkers = cluster.getMarkers();
var splitterBar = "border-bottom";
for (var i = 0; i < clickedMarkers.length; i++) {
if (i === 0) {
var var_pos = clickedMarkers[i];
}
var clickedMarkersNames = clickedMarkers[i].title;
var innerText = document.createElement("div");
//Format the shout body
content += '<div id="content " class="' + splitterBar + '">' +
'<div id="bodyContent">' +
'<article id="shout' + i + '"class="">' +
'<p> ' +
clickedMarkers[i].title +
'</p>' +
'<a data-ui-sref="comments">' +
'<small class="grey">' + clickedMarkers[i].address + ' • ' +
moment.duration(Date.now() - clickedMarkers[i].time).humanize() + ' • ' +
clickedMarkers[i].decibels + ' dB • ' +
clickedMarkers[i].echoes + echoesPlural +
'</small>' +
'</a>' +
'</article>' +
'</div>' +
'</div>';
//when infowindow is clicked, open view...
google.maps.event.addDomListener(innerText, 'click', (function() {
return function() {
alert("click");
}
})());
}
var boxText = document.createElement("div");
boxText.style.cssText = "border: 1px solid #E0E0E0; margin-top: 8px; background: white; padding: 0px; border-radius: 7px; max-height: 325px; overflow-y: auto;";
boxText.setAttribute("class", "animated fade");
boxText.innerHTML = content;
var myOptions = {
content: boxText,
disableAutoPan: false,
maxWidth: 0,
pixelOffset: new google.maps.Size(-135, -40),
zIndex: null,
boxStyle: {
background: "",
opacity: 1,
width: "280px"
},
closeBoxMargin: "13px 5px 5px 5px",
closeBoxURL: "",
infoBoxClearance: new google.maps.Size(1, 1),
isHidden: false,
alignBottom: true,
pane: "floatPane",
enableEventPropagation: false
};
var ib1 = new InfoBox(myOptions);
if (previousInfowindow) {
previousInfowindow.close();
}
previousInfowindow = ib1;
ib1.open(map, var_pos);
});
изменение: добавлено полный маркер щелчок кластер Я чувствую, как вложение должно быть сделано внутри для цикла или иначе сфера не будет правильной.
Я уже много читал об редком количестве информации, связанной с кластером, но я чувствую, что это простая проблема, и я хотел бы получить некоторое представление от кого-то еще. Спасибо за вашу помощь!
не уверен, почему кто-то проголосовал за закрытие этого как «вне темы»? – duncan
Не знаю. Спасибо, что поймали это, хотя .. – astrolope
На самом деле я не знаю, что вы пытаетесь сделать. Можете быть более конкретными? Или, может быть, вставить полный код. – jgr