3

我对 Rails 很陌生,我试图有两个部分 form_for 按钮,通过 ajax replaceWith 在单击时来回切换。

我的目标是有一个关注按钮,单击该按钮会切换为“取消关注”,并切换底层按钮操作。第一个开关效果很好(我可以在数据库中看到它经过),但是当我单击新制作的“取消关注”按钮时,不会出现相同的想法(切换到“关注”),而是打印文本我的 .js.erb 文件(但是我可以看到取消关注操作已提交到数据库)。基本上在第二次单击时不会发生正确的渲染,我很不确定为什么。

我将在下面发布一些代码,如果这不是一个好问题,我很抱歉,我在理解很多 Ajax 方法时遇到了一些麻烦。

太感谢了!丽莎

_unfollow.html.erb

<%= form_for(@user,:remote => true,method: :delete, format: 'js') do |f| %>
<%= f.submit "Unfollow", class: "btn btn-large", id: "Submit"%>
<% end %>

_follow.html.erb

<%= form_for(@user, :remote=>true,      format: 'js') do |f| %>
<%= f.submit "Follow", class: "btn btn-large btn-primary", id: "Submit" %>
<% end %>

控制器调用的创建/销毁(我希望它们在上面的两个部分之间切换)

创建.js.erb

$('#Submit').replaceWith("<%= escape_javascript(raw render :partial => 'follow' )%>");

销毁.js.erb

$('#Submit').replaceWith("<%= escape_javascript(render( :partial => 'unfollow')) %>");

同样,无论我最初在页面上有哪个部分/表单,第一次点击正确切换,第二次点击 .js.erb 并将其打印出页面(插入 html)

4

2 回答 2

1

尝试替换整个表单而不仅仅是提交按钮,如下所示:

_unfollow.html.erb

<%= form_for(@user,:remote => true,method: :delete, format: 'js', html: { id: "button-form" }) do |f| %>
  <%= f.submit "Unfollow", class: "btn btn-large" %>
<% end %>

_follow.html.erb

<%= form_for(@user, :remote=>true, format: 'js', html: { id: "button-form" }) do |f| %>
  <%= f.submit "Follow", class: "btn btn-large btn-primary" %>
<% end %>

创建.js.erb

$('#button-form').replaceWith("<%= escape_javascript(render :partial => 'follow' )%>");

销毁.js.erb

$('#button-form').replaceWith("<%= escape_javascript(render( :partial => 'unfollow')) %>");
于 2013-01-12T01:15:17.523 回答
0

尝试删除rawcreate.js.erb 中的调用。

于 2013-01-12T00:29:18.177 回答