我按特定顺序列出了元素。问题是当我用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代码,所有都在这里,因此没有其他排序标准。
答案 0 :(得分:0)
由于缺乏答案,我会给你一个想法......
-
首先,您必须记住,使用Ajax调用时,问题是 将成为Ajax的附加,或者使用Rails&#39;数据。
我立即假设您的问题是您只是将新数据附加到您的观看中。你已经完成了你的代码;这可能是您的@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
没有区别?
不确定。
调试方式如下:
@order_items
对象(使用浏览器开发控制台中的network
标签)或Rails记录器