我正在迭代一个元素集合,并试图让AJAX在集合中的特定元素上正常工作。我嵌套了一些部分,以便对这些项进行迭代,并使用如下js.erb
调用:
$('#favorite_form').html("<%=j render partial: 'shared/unfavorite', locals: { mission: @mission } %>");
这似乎只会更改集合中的第一个项目,即使我可能正在单击列表中的第五个项目。
问题:我如何指定(通过.js和AJAX)更新哪个元素?这个jQuery调用是否对单个元素不够具体?该代码适用于常规的HTTP请求,所以我想知道是否有一种方法可以指定单个元素,但我认为partials就是这么做的:/
Example View ( _favorites.html.erb )
<div id="favorite_form">
<% if you_favorited_this?(current_user, mission) %>
<%= render partial: 'shared/unfavorite', locals: { mission: mission } %>
<% else %>
<%= render partial: 'shared/favorite', locals: { mission: mission } %>
<% end %>
</div>
您的问题似乎是选择器的特异性。一个有用的方法是使用div_for和dom_id。例如,因为看起来你在执行"任务":
# mission partial
<%= div_for mission do %>
...the rest of the partial...
<%= end %>
在你的js中,然后使用类似的东西:
$('#<%= dom_id @mission %>').html("<%=j render partial: 'shared/unfavorite', locals: { mission: @mission } %>");
您可能需要稍微调整标记,但当许多记录在同一页面上时,这是获得给定记录所需选择器的一个非常好的方法。
如果你只想更新你点击的项目,你可以尝试这样的方法:
$(".favorite_form").click(function() {
$(this).html("<%=j render partial: 'shared/unfavorite', locals: { mission: @mission } %>");
});
回调函数中的this
将仅引用实际单击的元素。