【问题标题】:Can I have a javascript partial in Ruby on Rails? Partial is trying to render in HTML我可以在 Ruby on Rails 中使用 javascript 部分吗? Partial 正在尝试以 HTML 格式呈现
【发布时间】:2019-02-08 00:15:36
【问题描述】:

我有一个功能,可以简单地选择当前页面上的所有复选框,创建一个表单,然后自动提交。

我不想在每个视图上重复完全相同的 JavaScript 代码,而是想尝试共享部分。

这是我目前所拥有的:

#views/shared/_delete_multiple_items.js.erb
alert("<%= random_variable %>");

.

#views/users/index.html.erb
...
<script>
  function deleteMulitpleUsers() {
    <%= render 'shared/delete_multiple_items', :locals => {:random_variable => "Hello World" %>
  }
</script>

如果我正确理解此错误,Rails 似乎正在尝试在 HTML 中呈现部分内容:

缺少带有 {:locale=>[:en] 的部分共享/_delete_multiple_items, :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :coffee, :jbuilder]}。搜索:

我尝试在渲染中包含:formats =&gt; :js,如下所示:

<%= render 'shared/delete_multiple_items', :locals => {:random_variable => "Hello World", :formats => :js %>

但我仍然得到同样的错误。任何帮助将不胜感激。

【问题讨论】:

    标签: javascript ruby-on-rails ruby


    【解决方案1】:

    您收到该错误是因为服务器响应格式是 html,而不是 javascript。设置响应格式在控制器中完成,因此将format: :js 放入模板将不起作用。尝试这些步骤,看看它们是否适合您。

    1. _delete_multiple_items.js.erb 重命名为 _delete_multiple_items.html.erb

    2. alert("&lt;%= random_variable %&gt;");放入&lt;script&gt;标签内

    3. index.html.erb中,去掉所有js相关的代码,只做<%= render 'shared/delete_multiple_items', :locals => {:random_variable => "Hello World" %>

    【讨论】:

    • 这对我有用。我不确定我为什么要专门尝试加载一个 JS 文件,而我本来可以简单地加载一个普通的部分文件,并将 JS 包含在 &lt;script&gt; 标记中。非常感谢您的帮助。
    【解决方案2】:

    改变这个:

    <%= render 'shared/delete_multiple_items', :locals => {:random_variable => "Hello World" %>
    

    到这里:

    <%= render partial: 'shared/delete_multiple_items', formats: :js, :locals => {:random_variable => "Hello World"} %>
    

    partial: 开头告诉 rails 去寻找一个部分,formats: :js 告诉 rails 去寻找一个 js 文件(注意 formats 不是 locals 的孩子)

    【讨论】:

      【解决方案3】:

      您是否尝试在 js.erb 文件中添加 j ?

      #views/shared/_delete_multiple_items.js.erb
      alert("<%= j random_variable %>");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-28
        • 2014-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-07
        • 2011-04-16
        相关资源
        最近更新 更多