2016-01-07 56 views
0

我試圖通過Chrome控制檯使用JavaScript函數,當我將該JavaScript函數放入Rails資產管道清單中時。下面是我用來創建的步驟和設置一個簡單的Rails 4.2.4應用Javascript函數在導軌中4資產管道樹

$ rails new JavascriptExample 
$ cd JavascriptExample 
$ rails g scaffold Bear name:string 
$ rake db:migrate 

然後我編輯app/assets/javascripts/bears.coffee並添加一個控制檯日誌和功能。

console.log("asset pipeline sucks") 
square = (x) -> x * x 

然後我火了我訪問localhost:3000/bears服務器

$ rails s 

,並在Chrome控制檯我看到我的第一行代碼工作過。但是,當我嘗試命令square(5);在控制檯我收到一個錯誤Uncaught ReferenceError: square is not defined(…)

爲什麼我不能這樣做,當這個功能明確加載到application.js

回答

1

這是你的CoffeeScript編譯爲JavaScript

(function() { 
    var square; 

    console.log("asset pipeline sucks"); 

    square = function(x) { 
    return x * x; 
    }; 
}).call(this); 

thisthe var keyword is reserved in CoffeeScript, and will trigger a syntax error if used. Local variables are created implicitly by default,所以它不是在全球範圍內可作爲您的期望

要使其工作,我們可以這樣做這個代替:

console.log("asset pipeline sucks") 
@square = (x) -> x * x 

需要注意的是,我們有@ 現在牛逼他編譯javascript將是:

(function() { 
    console.log("asset pipeline sucks"); 

    this.square = function(x) { 
    return x * x; 
    }; 

}).call(this);