Sencha touch 2:在 Google 地图信息 window 上添加一个按钮
Sencha touch 2: add a button on Google maps info window
我正在尝试在 Google 地图信息 window 上添加 link 或按钮
(https://developers.google.com/maps/documentation/javascript/examples/infowindow-simple) 并使用我的 sencha 触摸控制器处理 'tap' 事件。我的代码不工作。基本上我想做的是用原生 Javascript 触发一个事件并在我的控制器中收听它。
这里我在标记上添加信息window:
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);
});
我的 index.html 中的 fireEvent 函数,它运行时没有任何异常:
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')}
}
}
一次只显示一条信息window。
这是一个干净的解决方案:
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 上的函数。
我正在尝试在 Google 地图信息 window 上添加 link 或按钮 (https://developers.google.com/maps/documentation/javascript/examples/infowindow-simple) 并使用我的 sencha 触摸控制器处理 'tap' 事件。我的代码不工作。基本上我想做的是用原生 Javascript 触发一个事件并在我的控制器中收听它。
这里我在标记上添加信息window:
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);
});
我的 index.html 中的 fireEvent 函数,它运行时没有任何异常:
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')}
}
}
一次只显示一条信息window。
这是一个干净的解决方案:
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 上的函数。