【问题标题】:Ruby on Rails updating list with AJAX breaks orderRuby on Rails 使用 AJAX 更新列表中断顺序
【发布时间】:2015-10-03 08:30:29
【问题描述】:

我有一个按特定顺序排列的元素列表。问题是当我用 AJAX 更新任何元素时,这个元素会跳到列表的底部。当我重新加载页面时,它会返回正确的位置。更新时我希望这个元素留在原处。

名单:

<div class="shopping-cart">
  <%= render "shopping_cart" %>
</div>

_shopping_cart.html.erb:

<% @order_items.each do |order_item| %>
    <%= render 'carts/cart_row', order_item: order_item %>
<% end %>

_cart_row.html.erb:

<%= form_for order_item, remote: true do |f| %>
    <%= f.number_field :quantity, class: "form-control cart-quantity" %>
    <%= f.submit "Submit", class: "btn" %>
<% end %>

update.js.erb:

$(".shopping-cart").html("<%= escape_javascript(render 'carts/shopping_cart') %>")

任何想法为什么会发生这种情况?谢谢。

更新

控制器代码:

@order_items = current_order.order_items.order("created_at ASC")

并且不再有任何 AJAX 代码,都在这里,因此没有其他排序标准。

【问题讨论】:

  • 需要查看实际加载项目的控制器代码。 AJAX 查询是否有单独的代码?如果是这样,请确保该查询具有相同的排序条件。
  • 更新了初始帖子
  • 在该代码中,您按“created_at ASC”对它们进行排序,这意味着最新创建的项目将位于底部。我不确定您如何以任何其他顺序获取它们,除非在某处有其他代码将它们排序为不同的顺序。

标签: javascript jquery ruby-on-rails ajax


【解决方案1】:

由于没有答案,我给你一个想法......

--

首先,您必须记住,对于 Ajax 调用,问题是将是 Ajax 的附加,或者是 Rails 的数据。

我立即推测您的问题是您只是将新数据附加到您的视图中。你已经很好地处理了你拥有的代码;这可能是您的 @order_items 数组的问题。

这是我要做的:

update.js.erb:
$(".shopping-cart").html("<%=j render 'carts/shopping_cart' %>")

_shopping_cart.html.erb:
<% render 'carts/cart_row', collection: @order_items, as: :order_item %>

控制器代码:

@order_items = current_order.order_items.order :created_at

没有区别?

当然。

调试的方式会是这样的:

  1. 检查@order_items 对象(使用浏览器开发控制台中的network 选项卡)或Rails 记录器中
  2. 检查 JS 没有对数据做任何愚蠢的事情。如果数据排序正确,则应按要求附加。

【讨论】:

  • 感谢您的回答。不幸的是,我无法找出产生这种行为的原因。正如我在重新加载页面时提到的,元素返回到正确的位置。所以我只是在更新后使用此代码重新加载指定的 div:$('#thisdiv').load(document.URL + ' #thisdiv');
猜你喜欢
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-05
  • 2013-05-20
相关资源
最近更新 更多