【发布时间】:2013-02-06 02:50:32
【问题描述】:
一周前我问了一个类似的问题,但我的问题没有真正的答案。那是因为我暴露问题的方式。
我正在编写一个 jquery 谷歌地图插件,所以我们可以这样做:
var my_map = $('#map').plugin();
my_map.addMarker( 'Melbourne, Australia' );
my_map.addMarker( 'New York, USA' );
console.log ( my_map.getMarkers() ); // how to return markers array here ?
为了添加我的标记,我使用了谷歌地理编码,它将地址转换为纬度和经度。一旦我得到响应,我就会将我的标记添加到地图中并将它们存储在一个数组中。
一切正常。 为了检索我的标记数组,我在插件中完成了这个:
self.getMarkers = function()
{
self._deferred.done( function()
{
// I need to pass this to the outer scope
console.log( 'Deferred done :' , self.markers );
return self.markers;
});
}
如果我只返回 self.markers 而不使用 deferred 则数组为空,因为响应尚未返回,但如果我使用 deferred 则无法将数组传递到外部作用域。
另外,我不希望使用插件的开发人员必须这样做:
my_map.done( function( markers ) {
// code
});
我可以通过返回承诺来做到这一点,但我想通过 my_map.getMarkers() 获得标记数组
我希望问题很清楚,如果不是,请向我寻求说明。 如果您需要查看完整代码,请点击此处:http://jsfiddle.net/Vy4da/
【问题讨论】:
-
为了让
my_map.done传递标记数组而不是单独的addMarker会好得多,这样您就可以跟踪数组的状态并在内部触发回调 -
@charlietfl 这实际上是原始版本中的内容我将标记对象传递给
addMarkers(),但我简化了插件以暴露我的实际问题,但感谢您的建议:) -
OK..但是如果您使用方法
addMarkers,而不是将数组传递给初始化对象,则在初始化时无法知道是否传入了标记 -
建议看看 gmap3。是谷歌地图的一个很棒的包装器
-
@charlietfl 我知道gmap3,我做这个插件主要是为了学习。
标签: jquery callback jquery-deferred