javascript - Rails 4.1 中将 bug Coffeescript 渲染为 js?

标签 javascript ruby-on-rails coffeescript

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

这是 CoffeeScript 代码的开始

->
  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

当通过 CoffeeScript 网站在 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) {
           .....

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

您需要更多代码吗?

最诚挚的问候

最佳答案

Rails 在编译时将任何 CoffeeScript 包装在匿名函数中,因此这实际上是有效的。

即使是像这样简单的事情:

x = 1

在coffeescript中,被编译为:

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

在 Rails JavaScript 中。因此,为什么您的示例会编译为匿名函数中的匿名函数。这是执行此操作的链轮代码:

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

可以使用全局变量来解决这个问题,但我不建议这样做,而是尝试创建一个模块系统。

关于javascript - Rails 4.1 中将 bug Coffeescript 渲染为 js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23630126/

相关文章:

javascript - 在 d3 中向 Voronoi 图添加点

javascript - IE 7 或 Opera 10.01 无法识别 JSON2.js

JavaScript 编码

ruby-on-rails - 何时在 ActionController::Parameters 中使用切片与许可?

ruby-on-rails - 在 Rails 模型类中使用 attr_accessor

ruby-on-rails - ruby rails : How to sort a collection_select

javascript - 如何在 Backbone 模型中放置按钮?

backbone.js - 为什么为这个主干 View 定义了 el 和 $el ?

node.js - WebStorm 在导入时显示保留字

javascript - 如何使用jquery找到div的中心