如何通过map.event.addListener将参数传递给外部函数

时间:2013-03-30 14:16:10

标签: google-maps google-maps-api-3

我想将监听器添加到谷歌地图事件,但是不使用匿名函数,而是命名,外部函数,因为这发生在循环中,我不想在那里定义匿名函数,但是而是使用命名的外部函数:

不是:

for (...) {
    googleMap.event.addListener(instance, eventName, function() {...});
}

而是......像:

doSomething = function(parameter1, parameter2...) {
    ...
}

for (...) {
    googleMap.event.addListener(instance, eventName, params, doSomething);
}

当“instance”是谷歌地图标记时,我可以使用marker.set(paramName, paramValue)将参数添加到标记中,然后通过this.paramName访问事件处理函数内的参数,但是在那里当我不想使用匿名函数时,是否有任何其他方法将值传递给事件处理函数?

欢迎任何建议,罗曼。

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。这是一个解决方案。它通过使用此处描述的模式

真正避免了循环问题中的创建功能

In JavaScript, what are specific reasons why creating functions within a loop can be computationally wasteful?

我称之为"功能工厂"图案。

其他成分是功能内部"这个"指的是引发函数的对象(地图上被点击的东西,或者其他东西),并且因为JavaScript是完全动态的,你可以随意将附加属性附加到被点击的东西上,并通过调用它来查询它们。在函数内部等等

function doSomethingHandlerFactory(){
var f = function(event){
    //do something, for example call a method on a property we attached to the object which raised the event
    this.blah.clicked(event);
};
return f;
}

//add a property to the google overlay object (for example a polyline which we've already set up)
thePolyline.blah = ...;

//get a handle for a function, attach the event (in this case to a polyline), and keep  
//a reference to the event (in case we want to call removeListener later).  The latter
//is optional.
var f = doSomethingHandlerFactory();
var ev = google.maps.event.addListener(thePolyline, 'click', f);

我希望这可以帮助别人。

答案 1 :(得分:1)

如何将命名函数包装在匿名函数中:

google.maps.event.addListener(instance, eventName, function() { doSomething(parameter1, parameter2,...) });