如果不使用 `.js.erb`,如何在 AJAX 请求后动态更新 DOM 元素?
How do I dynamically update a DOM element after an AJAX request if not using a `.js.erb`?
所以我有一个 link/button 在我的助手中看起来像这样 class:
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 }
在我的控制器中调用这些方法:
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。
在我看来,我会像这样显示对特定 node
的投票数:
<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
块不是必需的,但您可以尝试上面的代码。当它是一个 js 请求时它会用 js.erb
响应,当它是 html 请求时它会重定向。
所以我有一个 link/button 在我的助手中看起来像这样 class:
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 }
在我的控制器中调用这些方法:
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。
在我看来,我会像这样显示对特定 node
的投票数:
<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
块不是必需的,但您可以尝试上面的代码。当它是一个 js 请求时它会用 js.erb
响应,当它是 html 请求时它会重定向。