Javascript RubyonRails使用AJAX更新列表打破了顺序
我有一个按一定顺序排列的元素列表。问题是当我用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的附
<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