在Rails 4.1中将bug coffeescript渲染为js?

时间:2014-05-13 11:33:54

标签: javascript ruby-on-rails coffeescript

我刚刚构建了一个普通的RoR 4.1应用程序,没有添加任何内容来测试一些咖啡脚本代码。

这是咖啡脚本代码的开头

->
  canvas
  ctx
  code
  point
  style
  drag = null
  dPoint
  # define initial points
  Init (quadratic) ->
    point =
      p1:
        x: 100
        y: 250

      p2:
        x: 400
        y: 250

    if quadratic
      point.cp1 =
        x: 250
        y: 100
    else
      point.cp1 =
        x: 150
        y: 100

      point.cp2 =
        x: 350
        y: 100

当通过咖啡脚本网站在Javascript中渲染时,它给了我,这似乎是正确的

(function() {
  canvas;
  ctx;
  code;
  var canvas, code, ctx, drag;
  drag = null;
  Init(function(quadratic) {
   var point, style;
   point = {
     ...

但是当我看到由rails生成的代码时,我看到了这一点(并没有任何效果)

(function() {
    (function() {
        canvas;
        ctx;
        code;
        var canvas, code, ctx, drag;
        drag = null;
        dPoint;
        Init(function(quadratic) {
           .....

你知道发生了什么,为什么它被封装在另一个函数中?

你需要更多代码吗?

最好的问候

2 个答案:

答案 0 :(得分:1)

Rails在编译时将任何咖啡脚本包装在匿名函数中,所以这实际上是有效的。

所以即使是简单的事情:

x = 1

在coffeescript中,编译为:

(function() {
  var x;
  x = 1;
}).call(this);

在rails javascript中。因此,为什么您的示例正在编译匿名函数中的匿名函数。这是执行它的链轮代码:

https://github.com/sstephenson/sprockets/blob/master/lib/sprockets/jst_processor.rb

可以使用全局变量来解决这个问题,但我不推荐它,而是寻找创建模块系统。

答案 1 :(得分:0)

感谢您的回答,

我删除了' - >'在顶部它现在有效,它是匿名函数中的javascript。

我想知道如果我写一个' jQuery - >'在调用Jquery插件时,在脚本的顶部,但是自从引入turbo-links以来它似乎已经改变了。但这是另一个问题。

感谢您现在的代码工作