我有一个功能,可以简单地选择当前页面上的所有复选框,创建表单,然后自动提交。
我不想尝试在每个视图上重复相同的完全相同的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 => :js
包含在render中,就像这样:
<%= render 'shared/delete_multiple_items', :locals => {:random_variable => "Hello World", :formats => :js %>
但是我仍然得到同样的错误。任何帮助将不胜感激。
答案 0 :(得分:1)
您是否尝试过在js.erb文件中添加j?
#views/shared/_delete_multiple_items.js.erb
alert("<%= j random_variable %>");
答案 1 :(得分:0)
您收到该错误,因为服务器响应格式是html,而不是javascript。设置响应格式是在控制器中完成的,因此无法将format: :js
放入模板中。尝试这些步骤,看看它们是否对您有用。
将_delete_multiple_items.js.erb
重命名为
_delete_multiple_items.html.erb
将alert("<%= random_variable %>");
放在<script>
标记内
在index.html.erb
中,删除所有与js相关的代码,然后执行<%=
render 'shared/delete_multiple_items', :locals => {:random_variable
=> "Hello World" %>
答案 2 :(得分:0)
更改此:
<%= 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
不是{{1 }})