Sil*_*lox 3 ruby-on-rails remote-forms turbolinks ruby-on-rails-4
我使用Rails 4,Turbolinks和一个远程表单有一个相当奇怪的问题.我的表格看起来像:
<%= form_for [object], remote: true do |f| %>
<td><%= f.text_field :name, class: 'form-control' %></td>
<td><%= f.email_field :email, class: 'form-control' %></td>
<td><%= f.submit button_name, class: 'btn btn-sm btn-primary' %></td>
<% end %>
Run Code Online (Sandbox Code Playgroud)
此表单添加(创建)一个新对象.但它确实不起作用:
当为此链接禁用Turbolink时,页面工作正常.
我有两个问题:
提前致谢.
解
感谢@ rich-peck,解决方案是添加一个javascript,点击按钮后手动提交表单:
<%= javascript_tag do %>
var id = "#<%= dom_id(f.object) %>";
var inputs = $(id).parent().find('input');
console.log(inputs);
$(id).parent().find('button').on('click', function(e) {
e.preventDefault();
$(id).append(inputs.clone());
$(id).submit();
});
<% end %>
Run Code Online (Sandbox Code Playgroud)
此代码将javascript添加到表单行,获取输入,将它们附加到ID并提交表单.preventDefault(); 防止在刷新页面并且表单实际工作时两次发送查询.
Turbolinks
如上所述,Turbolinks的问题在于它<body>使用ajax调用重新加载DOM 的一部分 - 这意味着JS没有重新加载,因为它在头部
围绕这个问题的典型方法是从delegate你的JS document,像这样:
$(document).on("click", "#your_element", function() {
//your code here
});
Run Code Online (Sandbox Code Playgroud)
因为document总会存在,所以它会不断触发JS
远程
对于你的问题,它稍微有些棘手
问题是你依赖于Rails 的JQuery UJS(不引人注目的JavaScript)引擎,这很难自行解决
我们从来没有遇到过这个问题,我们一直使用Turbolinks - 所以我想问题可能在于你如何构建表单/处理请求.这个GitHub似乎重现了这个问题,而且它与表格有关
也许你可以试试:
<%= form_for [object], remote: true do |f| %>
<%= f.text_field :name, class: 'form-control' %>
<%= f.email_field :email, class: 'form-control' %>
<%= f.submit button_name, class: 'btn btn-sm btn-primary' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7653 次 |
| 最近记录: |