Rails:在动作完成之前,我的Ajax是否部分呈现?

时间:2015-07-31 18:57:12

标签: ruby-on-rails ruby ajax partials

我有一个User模型,每个用户has_many:Deliveries。我有一个名为_currentDeliveries的部分,它向用户显示有关每个交货的一些信息。

显示的每个Delivery都有一个删除按钮(现在只是一个小方块div),我正在使用Ajax,所以如果用户单击其中一个Deliver之后的删除按钮,那么该传递将被销毁从列表中删除(通过重新呈现部分)而不刷新页面。

我几乎按照我想要的方式工作,唯一的问题是当我点击一个交付的删除按钮时,它不会从列表中删除,直到我单击另一个交付的删除按钮。并且,在我单击第三个删除按钮之前,我删除的第二个传递不会从列表中删除,依此类推。
基本上,部分总是落后于应该的位置,这使我认为部分在交付完全删除之前呈现。

这是包含部分的div:

<div id="currentDeliveriesArea">
        <%= render "currentDeliveries", user: @user %>
    </div>


这是部分:

<% user.deliveries.each do |d| %>
<div class="deliveryBox">
    <div class="deliveryBoxLeft">
        <div class="editDeliveryButton">
        </div>
    </div>
    <div class="deliveryBoxCenter">
        <p class="deliveryTitleText">Delivery</p>
        <p class="deliveryTimeText">
        <% if d.minute > 9 %>
            <% if d.am == 1 %>
                <%= d.hour %>:<%= d.minute %> am
            <% else %>
                <%= d.hour %>:<%= d.minute %> pm
            <%end%>
        <% else %>
            <% if d.am == 1 %>
                <%= d.hour %>:0<%= d.minute %> am
            <% else %>
                <%= d.hour %>:0<%= d.minute %> pm
            <%end%>
        <%end%>
        </p>
    </div>
    <div class="deliveryBoxRight">
        <div class="deleteDeliveryButton" onclick="getDeleteDelivery(<%= d.id %>);">
        </div>

    </div>
</div>


这是在单击div“deleteDeliveryButton”时调用的javascript函数:

function getDeleteDelivery(delivery){
$.get("/deleteDelivery", {delivery: delivery})}


以下是users_controller中的deleteDelivery操作:

def deleteDelivery
    @user = current_user
    puts "made it to delete action"
    @user.deliveries.each do |d|
        puts "Delivery ID " + d.id.to_s

    end
    @delivery = params[:delivery]
    puts "User deliveries count before: " + @user.deliveries.count.to_s
    Delivery.find(@delivery).destroy
    puts "User deliveries count after: " + @user.deliveries.count.to_s

    respond_to do |format|
        format.js
    end
end


以下是从操作中调用并重新呈现部分的deleteDelivery.js.erb文件:

$("#currentDeliveriesArea").html("<%= j(render partial: 'currentDeliveries', locals: {user: @user}) %>");


如果我在每次删除按钮后刷新页面,每次都会从列表中删除交付,但由于某种原因,Ajax似乎落后于1次。控制台说完全删除了交付,并且@ user.deliveries.count少了一个,然后才会显示_currentDeliveries,然后呈现deleteDelivery.js.erb,所以我不确定是怎么回事。
对bpm的错误命名约定感到抱歉!

0 个答案:

没有答案