Javascript函数在rails 4资产管道树中

时间:2016-01-07 17:28:54

标签: javascript ruby-on-rails asset-pipeline

当我将这个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时,为什么我不能这样做?

1 个答案:

答案 0 :(得分: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);