在谷歌地图的addListener事件中传递函数

Passing function in the addListener event of the google maps

本文关键字:传递函数 事件 addListener 谷歌地图      更新时间:2024-06-19

我正在构建一个javascript对象Map,以便能够通过Google Map处理事件。

我希望能够在事件发生时传递要执行的函数:

var MapMarker = (function ($) {
    bindClickEvent = function (marker, action) {
        google.maps.event.addListener(marker, 'click', action);
    };
    return {
        bindClickEvent: bindClickEvent,
    };
})(jQuery);

我试着这样称呼它:

 var action = PartnerDetail.load(id);   <=== it gets executed here
 MapMarker.bindClickEvent(marker, action);

问题是它在调用之前执行,我希望能够传递任何要在addListener事件中执行的函数。

好吧。你已经回答了。将函数操作作为函数对象传递。重要的是要知道:当你执行函数并将其保存在变量(action)中时,action将不再是一个函数,而是一个对象,无论执行的fn返回什么。

因此,目前将行动定义为

PartnerDetail.load

只需使用带闭包的函数文字。。。

MapMarker.bindClickEvent(marker, (function (i) {
        return function () {
            PartnerDetail.load(i)
        }
    })(id)
);

这将在i参数上创建一个闭包,该参数是对id的引用。传递给事件侦听器的对象是一个函数,该函数将在执行时加载id。

您不需要操作变量。

您也可以将其隐藏在bindClickEvent对象中。。。

var MapMarker = (function ($) {
    bindClickEvent = function (marker, action, id) {
        google.maps.event.addListener(marker, 'click', (function(i){ 
            return function(){
                action(i)
            }
        })(id));
    };
    return {
        bindClickEvent: bindClickEvent,
    };
})(jQuery);
MapMarker.bindClickEvent(marker, PartnerDetail.load, id)