我想将监听器添加到谷歌地图事件,但是不使用匿名函数,而是命名,外部函数,因为这发生在循环中,我不想在那里定义匿名函数,但是而是使用命名的外部函数:
不是:
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
访问事件处理函数内的参数,但是在那里当我不想使用匿名函数时,是否有任何其他方法将值传递给事件处理函数?
欢迎任何建议,罗曼。
答案 0 :(得分:3)
我遇到了同样的问题。这是一个解决方案。它通过使用此处描述的模式
真正避免了循环问题中的创建功能我称之为"功能工厂"图案。
其他成分是功能内部"这个"指的是引发函数的对象(地图上被点击的东西,或者其他东西),并且因为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,...) });