播放框架2.2.1通过ajax删除记录,方法:删除

时间:2014-02-11 00:02:15

标签: playframework playframework-2.0

阅读播放2.2.1文档后,我可以看到没有内置的机制来处理HTTP删除方法? (也不是PUT?)当我说内置时我的意思是,例如,rails有method="delete"可以与<a></a>一起用来调用DELETE动词的动作。
所以例如on下面的图片我有一个用户列表(GET /用户......)。 enter image description here

我如何理解我可以通过AJAX调用模拟删除方法,所以我尝试了以下方式:

// 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(controller)

@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");
}

这样做的正确方法是什么?或者我误解/忽略了文件?

2 个答案:

答案 0 :(得分:2)

你正在以正确的方式做到这一点。我可能只提一个小改进,你应该能够做到这一点:

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

JavaScript路由器方便地返回一个对象,该对象包含您正在读取的url属性,但它还包含type属性,如果您的路由配置为{{1} }} route,其值为DELETE。在我的应用程序中,我经常编写一个帮助方法,允许我轻松地将其他属性添加到jQuery AJAX请求调用中,例如:

DELETE

然后我可以这样做:

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

答案 1 :(得分:0)

您也可以直接使用路由对象进行呼叫,例如

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