当我将这个javascript函数放在Rails Asset Pipeline Manifest中时,我正试图通过Chrome控制台使用javascript函数。以下是我创建和设置简单的Rails 4.2.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
然后我启动服务器
$ rails s
我访问localhost:3000/bears
并在Chrome控制台中看到我的第一行代码已经有效。但是,当我在控制台中尝试命令square(5);
时,我收到错误Uncaught ReferenceError: square is not defined(…)
当此功能明确加载到application.js
时,为什么我不能这样做?
答案 0 :(得分:1)
这是你的coffeescript编译成javascript的原因
(function() {
var square;
console.log("asset pipeline sucks");
square = function(x) {
return x * x;
};
}).call(this);
来自this:the 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);