使用AJAX的Ruby on Rails更新列表打破了顺序
Ruby on Rails updating list with AJAX breaks order
我有一个按一定顺序排列的元素列表。问题是,当我用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调用,问题在于要么是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
没有区别吗?
确定。
调试方法如下:
- 检查
@order_items
对象(在浏览器开发控制台中使用network
选项卡),或在Rails记录器 中检查JS没有对数据做任何愚蠢的事情。如果数据顺序正确,则应按要求追加。
相关文章:
- 如何随机显示列表项的顺序
- 对Soundcloud自定义播放器播放列表的顺序进行排序
- 如何在角度js的自动完成下拉列表中对项目列表(按字母顺序)进行排序
- 如何根据 js 中每个单词的第 n 个字母按字母顺序排列列表
- 按调用顺序返回由Ajax/HTTP生成的数据列表
- 插入按字母顺序、javascript或jquery排序的新列表
- Mvc4将Jquery可排序列表项的顺序保持到控制器
- 按字母顺序排列列表
- 如何根据GeoJSON属性中的ID号设置下拉列表项的顺序
- 如何跟踪有序列表中的顺序,该列表具有一个循环列表项,提供不同的参数
- 链接的自定义顺序列表
- 从下拉列表中的数组中选取某个项目,然后将其显示为第一项并按字母顺序显示
- 当列表长度未知时按顺序调用 http.get
- 按数字顺序排列列表
- 根据jQuery中的列表顺序更改输入值
- 正在按给定的id序列设置列表顺序
- 如何根据当前日期重新安排网页上的列表顺序
- 使用Jquery ui按钮单击后保存新的ul列表顺序
- 使用jquery更新列表顺序
- 如何用jQuery获得可排序的列表顺序