Sencha touch 2: добавить кнопку в информационном окне Google Maps
Я пытаюсь добавить ссылку или кнопку в информационном окне карт Google ( https://developers.google.com/maps/documentation/javascript/examples/infowindow-simple) и обработать событие "tap" с помощью сенсорного ввода sencha контроллер. Мой код не работает. В основном то, что я пытаюсь сделать, это запустить событие с использованием встроенного javascript и прослушать его в моем контроллере.
Здесь я добавляю информационное окно на маркер:
google.maps.event.addListener(marker, 'click', function() {
me.selectedMarker = marker;
// info window
var contentString = "'<div id='content'>"
+ "<h1 id='firstHeading'>{0}</h1>"
+ "<div id='bodyContent'>{1}</div>" +
"<div id='detailLink' onClick=\"fireEvent(this, 'tap')\" style='text-decoration: underline'>" +
"TAP ME TO OPEN THE DETAIL" +
"</div>" +
"</div>"
contentString = contentString.format(punto.label, punto.descBreve);
if (me.infowindow) {
me.infowindow.close();
}
me.infowindow = new google.maps.InfoWindow({
content : contentString
});
me.infowindow.open(me.getMap(), marker);
});
Функция fireEvent в моем index.html, она работает без каких-либо исключений
function fireEvent(element, event) {
if (document.createEventObject) {
// dispatch for IE
var evt = document.createEventObject();
return element.fireEvent('on' + event, evt)
} else {
// dispatch for firefox + others
var evt = document.createEvent("HTMLEvents");
evt.initEvent(event, true, true); // event type,bubbling,cancelable
return !element.dispatchEvent(evt);
}
}
Обработчик событий в моем контроллере (он никогда не вызывается)
control : {
'#detailLink' : {
tap : function(){ alert('tapped')},
click : function(){ alert('clicked')}
}
}
Только одно информационное окно отображается одновременно.
1 ответ
Решение
Вот чистое решение:
google.maps.event.addListener(marker, 'click', function() {
var contentString = "'<div id='content'>"
+ "<h1 id='firstHeading'>{0}</h1>"
+ "<div id='bodyContent'>{1}</div>"
// + "<div id='detailLink' onClick=\"fireEvent(this, 'tap')\" style='text-decoration: underline; padding : 6px'>"
+ "<div id='detailLink' style='text-decoration: underline; padding : 6px'>"
+ "TAP ME TO OPEN THE DETAIL" + "</div>" + "</div>"
contentString = contentString.format(punto.label,
punto.descBreve);
if (me.infowindow) {
me.infowindow.close();
}
me.infowindow = new google.maps.InfoWindow({
content : contentString
});
me.infowindow.open(me.getMap(), marker);
// short delay
setTimeout(function() {
var iw = Ext.get('detailLink');
iw.addListener({
tap : function() {
// do what you need
}
});
}, 100);
});
Функция в fireEvent index.html больше не требуется.