繁体   English   中英

如果不使用`.js.erb`,如何在AJAX请求之后动态更新DOM元素?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM