2012-01-14 15 views
8

Tôi có một số mã thử nghiệm mà tôi đang cố gắng sử dụng để tìm ra backbone.js. khi tôi gọi phá hủy trên một đối tượng mô hình xương sống làm cho một yêu cầu DELETE để dịch vụ còn lại của tôi. nhưng, tôi không thể thấy bất kỳ ID nào cho biết bản ghi nào đang bị xóa trong dữ liệu yêu cầu, chuỗi truy vấn, nội dung hoặc bất kỳ đâu.nơi để có được id hồ sơ khi gọi backbone.js tiêu diệt

mô hình của tôi có thuộc tính id và tôi đã gán cho nó giá trị là 1. có điều gì khác mà tôi phải làm để đảm bảo id được chuyển qua máy chủ không? hoặc là có một số cách khác mà tôi có nghĩa vụ để phát hiện những gì hồ sơ đang bị xóa?

Edit - Dưới đây là các mã có liên quan:

var AccountModel = Backbone.Model.extend({ 
    url: 'Account/Update', 
    id: null, 
    username: '' 
}); 

var accountM = new AccountModel({id: 1, username: 'test'}); 

accountM.destroy(); 

Khi tôi nhìn vào debugger tôi thấy yêu cầu AJAX được thực hiện, nó chỉ trông như thế này:

Request URL:http://localhost/probli/Account/Update 
Request Method:DELETE 
Status Code:200 OK 

Có doens't vẻ là ID hoặc bất kỳ thứ gì và không có dữ liệu bài đăng. Tôi có làm gì sai không? Cảm ơn.

+1

bạn có thể chia sẻ của bạn kiểm tra mã xin vui lòng? –

+0

tôi vừa chỉnh sửa bài đăng để thêm mã. cảm ơn vì đã tìm kiếm! – Jason

Trả lời

17

Bạn nên thiết lập urlRoot thuộc tính của mô hình của bạn sau đó để Backbone xử lý xây dựng DELETE url:

var AccountModel = Backbone.Model.extend({ 
    urlRoot: 'Account/Update', 
    id: null, 
    username: '' 
}); 

Điều này sẽ gây ra các yêu cầu sau khi accountM.destroy() được gọi là:

Request URL:http://localhost/probli/Account/Update/1 
Request Method:DELETE 
Status Code:200 OK 
+0

đó là chính xác nó - cảm ơn! – Jason

+0

Làm thế nào để biến id không thành 1? – lulalala

+0

@lulalala khi tạo một thể hiện mới với dòng này 'Tài khoản mớiModel ({id: 1, tên người dùng: 'test'});' –

1

Backbone.sync sẽ gửi tiêu hủy trở lại dưới dạng yêu cầu đơn giản với ID trong url. Ví dụ:

DELETE http://example.com/foos/1

Đây là HTTP delete cho một Foo với id của 1.

Trong các máy chủ web MVC như Rails, ASP.NET MVC, và thậm chí Sinatra và các máy chủ đơn giản khác, đây sẽ là một tham số đi kèm với máy chủ của bạn.

Ví dụ, trong Sinatra:


delete "/foos/:id" do 

    id = params[:id] # the id from the url/route 

    foo = Foos.find(id) # get the foo 
    foo.destroy 
    return {}.to_json 
end 

Như bạn thấy đấy, tôi đã xác định một tham số trong các tuyến đường, được gọi là :id và mã của tôi đã có thể truy cập nó thông qua các dữ liệu params. Sau đó tôi tìm thấy số Foo được đề cập, đã hủy và trả lại kết quả JSON trống - được yêu cầu bởi Backbone, ngay cả trong khi hủy.

Hy vọng điều đó sẽ hữu ích.

+0

cảm ơn bạn đã trả lời. có một nơi nào đó trong javascript xương sống mà bạn chỉ định nơi id sẽ được thêm vào url? Tôi chỉ đăng một số mã mẫu và nhìn vào dubugger tôi có thể thấy yêu cầu được thực hiện nhưng không có id. cảm ơn. – Jason

+0

Mọi cập nhật cho điều này. Tôi đang gặp vấn đề tương tự. Yêu cầu DELETE được gửi nhưng 'id' không được gửi trong URL. Tôi đã kiểm tra các mô hình không tồn tại trong bộ sưu tập với một id hợp lệ – detj

Các vấn đề liên quan