【问题标题】:Syntax error from embedded ruby in javascriptjavascript 中嵌入 ruby​​ 的语法错误
【发布时间】:2015-03-10 05:47:59
【问题描述】:

我正在尝试按照这个示例将 Ruby 代码嵌入到我的 application.js 中 How do I properly put embedded ruby code in to JavaScript?

但是当我把这条线:

var formData = <%= @s3_direct_post.fields.to_json.html_safe %>;

我得到“语法错误:预期的表达式,得到'

我看到过关于其他类似问题的建议,可以像这样在 Ruby 代码周围加上引号:

var formData = '<%s3_direct_post.fields.to_json.html_safe %>';

但随后变量变为字符串&lt;%s3_direct_post.fields.to_json.html_safe %&gt;,而不是执行Ruby并将结果放入字符串中。

仅供参考,我正在学习一个教程 (https://devcenter.heroku.com/articles/direct-to-s3-image-uploads-in-rails),所以我可能没有正确设置。

【问题讨论】:

  • 这不是 JavaScript。生成 JavaScript 的是 ERb,因此您需要对其进行预处理。如果按原样提供,将无法解释。这一行在哪里(哪个文件,哪个目录),你是如何渲染它的?
  • var formData = #{@s3_direct_post.fields.to_json.html_safe}
  • 它在 app/assets/javascripts/application.js 中。你怎么渲染它是什么意思?
  • Sontya 给了我“SyntaxError: 非法字符”
  • 你在哪里写这段代码?

标签: javascript ruby-on-rails ruby


【解决方案1】:

您不能简单地在 javascript 文件中使用 ruby​​ 代码或表达式,您需要先预处理 ruby​​ 代码,然后将该值传递给 javascript 引擎进行处理。 只需确保您的文件具有 js.erb 扩展名,因此您的文件将首先针对 ruby​​ 表达式进行处理,然后针对 js。

更多详情可以参考this question

【讨论】:

    【解决方案2】:

    我相信您遇到的问题是 Rails 不会尝试评估 application.js,而只是“按原样”交付文件。您引用的教程没有明确说明这一点,但您必须将任何 Ruby 脚本放入 ERB 模板中。 例如。尝试将您的代码添加到 app/views/users/_form.html.erb 或 new.html.erb 模板而不是 application.js。 Rails 将解释 Ruby 代码并呈现替换的值。

    【讨论】:

      【解决方案3】:

      如果您想在视图中使用 javascript 代码,您可以将以下代码添加到页面末尾。你应该能够运行javascript代码

      <% content_for :javascript do %>
          $(). //  your ruby code e.g. var formData = #{@s3_direct_post.fields.to_json.html_safe};
      <% end %>
      

      或者假设你的控制器中有显示动作,视图中有show 表单,那么你可以创建show.js.html 文件并在其中编写java-script 代码

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多