2013-08-01 28 views
10

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.

+2

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

+1

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;}). –

Trả lời

4

Tôi là người tạo ra Restangular.

Nếu tôi hiểu chính xác bạn, trước tiên bạn muốn đăng bài, sau đó thực hiện việc này? Trong trường hợp đó, bạn có thể làm điều gì đó như:

var res = {foo: 'bar'}; 
Restangular.all('resource').post(rest).then(function(response) { 
    res = response; 
    res.put() 
}) 

Tôi không biết mình có hiểu chính xác hay không.

Hy vọng nó hoạt động

+0

Cảm ơn bạn đã phản hồi, đó không phải là vấn đề của tôi. Chúng là hai hành động riêng biệt. Tôi sẽ chỉnh sửa câu hỏi chi tiết hơn. –

+1

Tôi nghĩ rằng những gì ông muốn là cho bất kỳ thay đổi phía máy chủ (như cập nhật dấu thời gian hoặc "sửa đổi bởi" loại sửa đổi đối tượng) để tự động, hoặc dễ dàng, cập nhật đối tượng khách hàng mà không cần phải làm điều đó từ '.then() '. Bạn không thể trực tiếp thiết lập nó vì bạn sẽ mất thêm bất kỳ thông tin mô hình nào và phải sử dụng một cái gì đó như '$ .extend()' – John

+4

Hey, sau khi chỉnh sửa, bạn có thể làm _.extend hoặc sử dụng tính năng mới trên Restangular 1.2. 0 $ đối tượng. res = res.put(). $ object; – mgonto

0

Hãy thử điều này:

res.put().then(function(data) { 
    angular.extend(res, data); 
}); 
Các vấn đề liên quan