![](/img/trans.png)
[英]How do I trigger a JS function from a js.erb executed as a callback on an AJAX call?
[英]How do I dynamically update a DOM element after an AJAX request if not using a `.js.erb`?
所以我的帮助器类中有一个类似于以下的链接/按钮:
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
我正在使用行为作为 。
在我看来,我显示了特定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请求时,它将重定向。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.