2014-02-11 65 views
0

閱讀播放2.2.1文檔後,我可以看到沒有內置的機制來處理HTTP刪除方法? (也不是嗎?)當我說內置的我的意思是,例如,軌道有method="delete",它可以與<a></a>一起使用來通過DELETE動詞調用動作。
因此,例如在以下圖片我有一個用戶列表(GET /用戶...)。 enter image description here播放框架2.2.1通過ajax刪除記錄,方法:刪除

我所理解的,我可以通過AJAX調用模擬delete方法,所以我嘗試了以下方法:

// index.scala.html

@users.map { user => 
... 
<td> <a href="#" class="delete-user" data-id="@user.getId()"> Delete </td> 
... 
} 

//的script.js

$(function() { 
    $('.delete-user').click(function() { 
     var id = $(this).data('id'); 
     var $that = $(this); 

     $.ajax({ 
      url: jsRoutes.controllers.Users.delete(id).url, 
      type: "DELETE" 
     }).done(function() { 
      $that.closest('tr').remove(); 
     }); 
    }); 
}); 

// Users.java(控制器)

@Transactional 
public static Result delete(Long id) { 
    JPA.em().remove(JPA.em().find(User.class, id)); 
    return ok("User with id=" + id + " has been deleted"); 
} 

那麼這是正確的方式來做到這一點?或者我誤解/忽略了文檔?

+0

Rails並不真正以你理解的方式支持'PUT'和'DELETE'。相反,它使用'POST'並用隱藏字段模擬其他方法。所以是的,你在正確的軌道上。 –

+0

我在框架支持的背景下談論。 – Srle

回答

2

你正在做正確的做法。我可能只是提一個人小的改進,你應該能夠做到這一點:

$.ajax(
    jsRoutes.controllers.Users.delete(id) 
).done(function() { 
    $that.closest('tr').remove(); 
}); 

JavaScript的路由器方便地返回包含url屬性,您已閱讀的對象,但它也包含了type財產,如果您的路線配置爲DELETE路線,則其值將爲DELETE。在我的應用我會經常寫一個輔助方法,可以讓我輕鬆其他屬性jQuery的AJAX請求調用加太多,如:

function ajax(route, params) { 
    return $.ajax($.extend(params, route)) 
} 

然後,我可以做這樣的事情:

ajax(jsRoutes.controllers.Users.delete(id), { 
    headers: { "Auth-Token": "foobar" } 
}).done(...) 
0

您也可以直接使用路由對象來進行呼叫,例如

jsRoutes.controllers.Users.delete(id).ajax({ 
    done: function (data) { 
    $that.closest('tr').remove(); 
    } 
});