javascript - Rails link_to 与 ajax 远程 true 不更新 View

标签 javascript jquery html ruby-on-rails ajax

我有一个有事件的小应用程序。在事件索引 View 中,我迭代所有事件并显示一些数据。在each里面我有一个指向“Upvote”特定事件的链接,这是一个ajax请求。由于某些原因,我的 View 不会立即更新,而是在我再次单击“投票”时更新。

这是我的“点赞”链接

<div id="upvote_link_<%= event.id%>">
   <%= link_to('Upvote', upvote_event_path(event), method: :post, remote: true)%>
</div>

这是我的upvote方法,我增加 votes字段。

  def upvote
    @event = Event.find(params[:id])
    Event.increment_counter(:votes, @event.id)
    respond_to do |format|
      format.js
    end 
  end

下一个是我的upvote.js.erb我在哪里替换了旧的 votes值与新值。

$('#upvotes_<%= @event.id %>').html("<%= escape_javascript (render 'upvote', event: @event )%>");

下一个是我的_upvote.html.erb替换旧的部分 votes值(value)。

<span style="font-family:MetaSerifOT-Book;font-size:13px;">
    <%= pluralize(event.votes, "vote") %>
</span>

问题是当我点击“Upvote”链接时,我的请求得到通过,votes我的事件模型中的字段已更新,但 View 不会更新,直到我单击 Upvote再次。我不确定发生了什么事。有什么想法或建议吗?

更新 这是我设置id的地方:upvotes_<%= event.id %>我已经隔离了Votes在部分内计数。

    <div id="upvotes_<%= event.id%>">
            <%= render 'upvote', event: event %>
    </div>

最佳答案

问题出在 Controller 代码中。我认为 @event 对象没有被重新加载。一种解决方案是您必须在 View 中重新加载 @event 对象,例如

$('#upvotes_<%= @event.id %>').html("<%= escape_javascript (render 'upvote', event: @event.reload )%>"); .

关于javascript - Rails link_to 与 ajax 远程 true 不更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34941052/

相关文章:

javascript - 如何确定 html 视频元素的预期帧速率

javascript - 通过用户生成形式值来创建对象。 'addEventListener' 为空

javascript - 未捕获的类型错误 : Cannot read property 'html' of undefined - AJAX post answer only in spesific div

Jquery文件上传-获取上传的附件数量

jquery - 隐藏菜单直到悬停框

javascript - 数组作为使用javascript的mongoose模式中的值

javascript - Yii 需要根据条件进行验证

javascript - Bootstrap 固定在顶部但低于顶部的警报

visual-studio-2010 - VS2010/VS2012 默认 Doctypes 以及用于面向 future 的文档类型

javascript - kinectJs 两个图像的旋转