这确实与CoffeeScript vs JS无关。 而是由于您的内联脚本在声明window.initialize
的外部文件运行之前运行。
内联脚本标记是一种不好的做法,这一点已被广泛接受。 因此,从摆脱它开始。
这是如何使用google loader和jQuery.Deferred而不是全局回调函数的示例:
jQuery(function(){
var apiLoaded = jQuery.Deferred();
var mapInit = jQuery.Deferred();
var $map_canvas = $('#map_canvas');
if ( $map_canvas.length ) {
google.load("maps", "3", { other_params:'sensor=false', callback: function(){
apiLoaded.resolve(google);
}});
apiLoaded.done(function(g){
var map = new g.maps.Map($map_canvas[0],{
center: new google.maps.LatLng(63.399313, 13.082236),
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
mapInit.resolve(map);
});
mapInit.done(function(map){
// do something with the map!
});
}
});
如果您未使用jQuery或加载器,则需要使用轮询来检查是否加载了google maps API:
function init(gmaps){
// do something with the maps api...
}
function isLoaded(){
if (!window.google){
window.setTimeout(function(){ isLoaded() }, 10);
} else {
init(window.google.maps);
}
}