2014-03-03 54 views
2

我试图用coffeescript来模拟这个asynchronously-loaded map谷歌地图:用coffeescript异步加载

这是我的CoffeeScript:

initialize = -> 
    mapOptions = 
    zoom: 8 
    center: new google.maps.LatLng(-34.397, 150.644) 

    map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions) 
    return 

loadScript = -> 
    script = document.createElement("script") 
    script.type = "text/javascript" 
    script.src = "https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&" + "callback=initialize" 
    document.body.appendChild script 
    return 


$(window).load -> 

loadScript() 

哪个编译为:

(function() { 
var initialize, loadScript; 

initialize = function() { 
    var map, mapOptions; 
    mapOptions = { 
    zoom: 8, 
    center: new google.maps.LatLng(-34.397, 150.644) 
    }; 
    map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions); 
}; 

loadScript = function() { 
    var script; 
    script = document.createElement("script"); 
    script.type = "text/javascript"; 
    script.src = "https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&" + "callback=initialize"; 
    document.body.appendChild(script); 
}; 

$(window).load(function() { 
    return loadScript(); 
}); 

}).call(this); 

然后我得到的错误:

Uncaught TypeError: Object [object global] has no method 'initialize'

我明白,我可能需要做文档的sco可访问的initialize()方法pe,但是因为coffeescript将所有模块都包含在匿名函数中,所以使这项工作最好的方法是什么?

回答

6
window.initialize = -> 
    # ... 

P.S.考虑给它一个更加独特的名字。