从html中的<script>调用coffeescript定义函数?

时间:2015-06-08 12:07:12

标签: javascript jquery ruby-on-rails coffeescript

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

&#xA;&#xA;

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

&#xA;&#xA;

我正在使用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;

1 个答案:

答案 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);
  }
}