Javascript RubyonRails使用AJAX更新列表打破了顺序

Javascript RubyonRails使用AJAX更新列表打破了顺序,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,我有一个按一定顺序排列的元素列表。问题是当我用AJAX更新任何元素时,这个元素会跳到列表的底部。当我重新加载页面时,它返回到正确的位置。更新时,我希望此元素保留在原来的位置 名单如下: <div class="shopping-cart"> <%= render "shopping_cart" %> </div> 这里没有任何AJAX代码,所以没有其他排序标准 因为没有答案,我给你一个想法 -- 首先,您必须记住,对于Ajax调用,问题要么是Ajax的附

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

名单如下:

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

这里没有任何AJAX代码,所以没有其他排序标准

因为没有答案,我给你一个想法

--

首先,您必须记住,对于Ajax调用,问题要么是Ajax的附加,要么是Rails的数据

我立即认为您的问题在于您只是将新数据附加到视图中。您已经很好地使用了您拥有的代码;您的
@order\u项目可能存在问题

下面是我要做的:

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
    对象(使用浏览器开发控制台中的
    网络
    选项卡)或Rails记录器
  • 检查JS没有对数据做任何愚蠢的事情。如果数据排序正确,则应根据需要进行追加

  • 因为没有答案,我给你一个想法

    --

    首先,您必须记住,对于Ajax调用,问题要么是Ajax的附加,要么是Rails的数据

    我立即认为您的问题在于您只是将新数据附加到视图中。您已经很好地使用了您拥有的代码;您的
    @order\u项目可能存在问题

    下面是我要做的:

    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
    对象(使用浏览器开发控制台中的
    网络
    选项卡)或Rails记录器
  • 检查JS没有对数据做任何愚蠢的事情。如果数据排序正确,则应根据需要进行追加

  • 需要查看实际加载项目的控制器代码。AJAX查询是否有单独的代码?如果是这样的话,请确保查询具有相同的排序条件。更新了您正在按“created_at ASC”对其进行排序的代码的初始POST,这意味着最新创建的项目将位于底部。我不确定你如何以其他顺序得到它们,除非有其他代码将它们按不同顺序排序。需要查看实际加载项目的控制器代码。AJAX查询是否有单独的代码?如果是这样的话,请确保查询具有相同的排序条件。更新了您正在按“created_at ASC”对其进行排序的代码的初始POST,这意味着最新创建的项目将位于底部。我不知道你会如何得到他们在任何其他顺序,除非有其他代码的地方,他们排序成不同的顺序。谢谢你的回答。不幸的是,我无法找出是什么导致了这种行为。正如我在重新加载页面时提到的,元素返回到正确的位置。因此,我只是在更新之后使用此代码重新加载指定的div:
    $('thisdiv').load(document.URL+'thisdiv')谢谢你的回答。不幸的是,我无法找出是什么导致了这种行为。正如我在重新加载页面时提到的,元素返回到正确的位置。因此,我只是在更新之后使用此代码重新加载指定的div:
    $('thisdiv').load(document.URL+'thisdiv')
    
    $(".shopping-cart").html("<%= escape_javascript(render 'carts/shopping_cart') %>")
    
    @order_items = current_order.order_items.order("created_at ASC")
    
    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