POST và PUT của tôi trả về trạng thái hiện tại của thực thể như được thấy trên máy chủ. Làm thế nào tôi có thể nói với Restangular để cập nhật đối tượng mô hình của nó sau khi cuộc gọi máy chủ?Làm thế nào để cập nhật đối tượng mô hình Restangular với phản hồi của máy chủ?
Chỉ trong trường hợp - tại sao? Bởi vì trong quá trình lưu/cập nhật, máy chủ có thể đã tính toán một số trường. Vì có thể có các bản cập nhật đồng thời của các ứng dụng khách khác và tôi muốn đảm bảo rằng ứng dụng khách hiện đang cập nhật được cập nhật.
Cho đến nay tôi chỉ thấy điều này:
var res = {foo: "bar"};
var cb = function(response) {
$.extend(res, response);
}
// POST/create
Restangular.all("resource").post(res).then(cb);
// PUT/update
res.put().then(cb);
Có vẻ như quá bẩn và phổ biến cùng một lúc mà tôi nghi ngờ có phải là một cách tốt hơn.
EDIT
Đoạn mã trên chỉ thể hiện hai hành động khác nhau. Mục tiêu của tôi là không phải để gửi cập nhật cho máy chủ sau khi tạo thực thể, nhưng cập nhật trạng thái trên máy khách. Đồng bộ hóa trạng thái với máy chủ, nếu bạn muốn.
Khi tôi đăng một đối tượng:
var res = {foo: "bar"};
Restangular.all("resource").post(res);
phản ứng Server có cơ thể với:
{"foo": "bar", "id": 15}
... sau đó tôi muốn Restangular để cập nhật và restangularize đối tượng res
tự động, vì vậy nó có ID, có thể là put()
v.v.
Bây giờ là một kịch bản bổ sung/khác biệt. Khi tôi PUT một đối tượng Restangular:
var res = Restangular.one("resource", 15).get();
// returns {foo: "bar", id: 15}
res.put();
Máy chủ luôn luôn trả lời với tình trạng hiện tại của đối tượng, trong đó có thể là:
{"foo": "buzz", "id": 15}
... vì vậy tôi muốn Restangular để cập nhật tự động sau khi res
PUT này.
có thực sự muốn nhìn thấy một phản ứng để này. @ mgonto, có một lý do cụ thể tại sao điều này không xảy ra? Có thể việc triển khai REST mặc định không trả về dữ liệu sau POST và PUT, chỉ có mã trạng thái? – jlb
Có, không có gì đảm bảo rằng một dịch vụ web RESTy sẽ trả về đối tượng được đề cập sau khi nó đã được tạo, thay đổi, vv Biểu mẫu chung cho việc này chỉ đơn giản là: $ scope.foo.put(). newFoo) {$ scope.foo = newFoo;}). –