我正在迭代一系列元素,并尝试让AJAX在集合中的特定元素上正常工作。我正在嵌套一些部分内容,以便迭代这些项目并使用js.erb
这样的调用:
$('#favorite_form').html("<%=j render partial: 'shared/unfavorite', locals: { mission: @mission } %>");
这似乎只会更改集合中的第一个项目,即使我可以点击列表中的第5个项目,例如。
问题:如何指定(通过.js和AJAX)更新哪个元素?这个jQuery调用对于单个元素来说不够具体吗?代码在常规的HTTP请求中工作,所以我想知道是否有一种方法可以指定单个元素,但我认为这是部分所做的:/
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>
答案 0 :(得分:2)
您的问题似乎是选择器特异性。一个有用的事情是使用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 } %>");
您可能需要稍微调整一下标记,但这是获取给定记录所需的选择器的一种非常好的方法,当许多位于同一页面上时。
答案 1 :(得分:0)
如果您只是尝试更新您点击的项目,可以尝试以下方式:
$(".favorite_form").click(function() {
$(this).html("<%=j render partial: 'shared/unfavorite', locals: { mission: @mission } %>");
});
回调函数中的this
将仅引用实际点击的元素。