Javascript 在google maps的addListener事件中传递函数
我正在构建一个javascript对象映射,以便能够通过Google映射处理事件 我希望能够在事件发生时传递要执行的函数:Javascript 在google maps的addListener事件中传递函数,javascript,jquery,google-maps,Javascript,Jquery,Google Maps,我正在构建一个javascript对象映射,以便能够通过Google映射处理事件 我希望能够在事件发生时传递要执行的函数: var MapMarker = (function ($) { bindClickEvent = function (marker, action) { google.maps.event.addListener(marker, 'click', action); }; return { bindClickEv
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);
var action=PartnerDetail.load(id) 嗯。你已经回答了。将函数操作作为函数对象传递。重要的是要知道:当您执行函数并将其保存在变量(action)中时,action将不再是一个函数,而是一个由执行的fn返回的对象
因此,现在将动作定义为
PartnerDetail.load
只需将函数文本与闭包一起使用
MapMarker.bindClickEvent(marker, (function (i) {
return function () {
PartnerDetail.load(i)
}
})(id)
);
这将在i参数上创建一个闭包,该参数是对id的引用。
传递给事件侦听器的对象是一个在执行时将加载id的函数
您不需要action变量
您也可以将其隐藏在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)
嗨,谢谢,你是怎么通过的?我试过了,它在通话中被执行了你是说它成功了,但仍然想传递“id”?或者具体是什么?是的,我如何传递id?好的,有两种方法可以做到这一点,但由于它是一个谷歌库,我不会太乱。确保将属性添加到PartnerDetail类中,以便您轻松访问。在类内部使用{id:xx}。。另一种方法是通过ClassName.id访问它:将.bind添加到定义的函数,但这有点麻烦,因为bind需要在传递'id'之前指定'this'关键字。使用bind之前,请阅读更多有关bind的信息。