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