所以我的助手类中有一个如下所示的链接/按钮:
link_to "UnFav", unfavorite_node_path(node), class: "btn btn-success favorite", method: :post, remote: true, data: { toggle_text: 'Fav', toggle_href: favorite_node_path(node), id: node.id }
在我的 Controller 中调用这些方法:
def favorite
@node.liked_by current_user
if request.xhr?
render json: { count: @node.get_likes.size, id: params[:id] }
else
redirect_to @node
end
end
def unfavorite
@node.unliked_by current_user
if request.xhr?
render json: { count: @node.get_likes.size, id: params[:id] }
else
redirect_to @node
end
end
我正在使用acts-as-votable .
在我看来,我显示特定节点
上的投票数,如下所示:
<span class="card-favorite-count">
<i class="icon-heart"></i> <%= node.cached_votes_total %>
</span>
理想情况下,我想要发生的是,当按下其中一个链接并且操作成功执行时,我想更新 DOM 中已显示的计数。
我尝试创建一个 favorite.js.erb
并将其放入其中:
$(".card-favorite-count").html('<%= node.cached_votes_total %>');
但我意识到,当我收藏和取消收藏某个项目时,在我的服务器日志中它从未调用过 favorite.js.erb
模板 - 因此这永远不会被执行。
我也在寻找 gem 上的回调,但找不到。
解决这个问题的最佳方法是什么?
最佳答案
要渲染文件favorite.js.erb
,您需要执行以下操作:
def favorite
@node.liked_by current_user
respond_to do |format|
format.js
format.html{ redirect_to @node }
end
end
end
我认为 if
block 不是必需的,但您可以尝试上面的代码。当它是 js 请求时,它会响应 js.erb
;当它是 html 请求时,它会重定向。
关于javascript - 如果不使用 `.js.erb` ,如何在 AJAX 请求后动态更新 DOM 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31498318/