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

时间:2015-02-27 18:05:13

标签: javascript jquery google-maps

我正在构建一个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事件中传递任何要执行的函数。

2 个答案:

答案 0 :(得分:0)

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

所以现在将动作定义为

PartnerDetail.load

答案 1 :(得分:0)

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

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)