我有一个rails应用程序,我正在重写我在CoffeeScript中的所有JS只是为了检查它。


我理解CoffeeScript编译成JS但是我遇到了麻烦某事。


我正在使用Google Maps API,我在其中一个html.erb文件中有一个脚本标记,如下所示:
&#xA;&# XA;<代码>&LT;脚本&GT;&#XA;初始化()&#XA;&LT; /脚本&GT;&#XA; 代码>&#XA;&#XA;
现在我的初始化曾经起作用,因为它只是用javascript编写的,但现在我有一个coffeescript函数而不是浏览器控制台说:
&#xA;&#xA; “Uncaught ReferenceError” :initialize没有定义“&#xA;
&#xA;&#xA; 我把它放在功能定义之后的coffeescript文件的底部,但仍然没有骰子。< / p>&#xA;&#xA;
window [“initialize”] =初始化&#xA;
&#xA;
答案 0 :(得分:0)
这与CoffeeScript vs JS没有任何关系。但这是因为您的内联脚本在声明window.initialize
的外部文件运行之前运行。
它被广泛接受,内联脚本标签是一种不好的做法。所以先摆脱它。
这是一个如何使用google loader&amp; 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);
}
}