一周前我问了一个类似的问题,但对我的问题没有真正的答案。那是由于我暴露问题的方式。
我正在写一个 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/