我刚刚构建了一个普通的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) {
.....
你知道发生了什么,为什么它被封装在另一个函数中?
你需要更多代码吗?
最好的问候
答案 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以来它似乎已经改变了。但这是另一个问题。
感谢您现在的代码工作