【问题标题】:Javascript functions in the rails 4 asset pipeline treerails 4 资产管道树中的 Javascript 函数
【发布时间】:2016-01-07 17:28:54
【问题描述】:

当我将 javascript 函数放在 Rails 资产管道清单中时,我试图通过 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中,为什么不能这样?

【问题讨论】:

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


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多