如何避免对标记点击事件监听器使用匿名回调函数?

Posted

技术标签:

【中文标题】如何避免对标记点击事件监听器使用匿名回调函数?【英文标题】:How to avoid of using anonymous callback function for marker click event listener? 【发布时间】:2012-08-10 09:09:33 【问题描述】:

我知道有很多方法可以对谷歌地图标记进行点击事件处理,我一直在使用这些方法并且它们总是很有效。

但只是好奇如果我们能以更好的方式做同样的事情,我正在考虑这个问题,因为在一个新项目中可能会有 100,000 个标记(当然它们不会显示在地图上同一时间,但标记的实例确实存在)

google.maps.event.addListener(marker, 'click', clickhandler); function clickhandler(event) /* 这里 */

在 clickhandler 的范围内,我们只有 latLng 信息,我想通过 latLng 搜索标记是不可靠的,这是浮点数,所以问题是,找到哪个标记被点击的最佳方法是什么?

【问题讨论】:

【参考方案1】:

标记上的鼠标单击事件将google.maps.MouseEvent object 传递给侦听器函数,因此:

// give the maker an id
marker.myId = 25;
google.maps.event.addListener(marker, 'click', clickhandler);

function clickhandler(mev) 
    alert(mev.latLng); 
    alert(this.myId);// shows 25

【讨论】:

谢谢马塞洛,这很有帮助! 我试过了,但是……当我达到投票的最低要求时我会回来的:-S,哈哈^_^【参考方案2】:

当我试图从一组元素中引用一个元素(例如,具有相同类的元素)时,使用this 可以帮助找到触发事件的正确元素。为了确保this 能正常工作,我与console.log 核对。

google.maps.event.addListener(marker, 'click', clickhandler); function clickhandler() console.log(this);

这应该记录标记对象。

【讨论】:

谢谢 Ennui,对我帮助很大,“this”是标记!

以上是关于如何避免对标记点击事件监听器使用匿名回调函数?的主要内容,如果未能解决你的问题,请参考以下文章

`this.some_property` 在匿名回调函数中变得未定义

源码解析Android中的事件处理

Java设计模式补充:回调模式事件监听器模式观察者模式(转)

回调函数——callback

安卓点击事件回调机制的思考

android单例中的监听如何回调