我刚刚构建了一个普通的 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/