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

标签 javascript jquery ruby-on-rails ruby-on-rails-4 ujs

所以我的助手类中有一个如下所示的链接/按钮:

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/

相关文章:

javascript - 减少两个 Canvas html 之间的空间

javascript - Gmaps.js 未在 Bootstrap 模式内加载

ruby-on-rails - 如何在保存在 ruby​​ on rails 之前验证表中的记录

mysql - Ruby on Rails - Params 中没有数据可保存在数据库中

javascript - 是 document.write 阻塞

javascript - DOM 属性是否适用于 Phone Gap android?

php - 如何从点击链接时调用的 JS 调用 PHP 函数?

javascript - 定位文本并根据其存在执行操作

javascript - 使用 Javascript(或 jQuery)淡入/淡出 HTML 元素的背景颜色

ruby-on-rails - 通过两个关系识别模型实例