मेरा पोस्ट और पुट सर्वर पर दिखाई देने वाली इकाई की वर्तमान स्थिति को वापस कर देता है। मैं सर्वर कॉल के बाद अपने मॉडल ऑब्जेक्ट को अपडेट करने के लिए रेस्टैंगुलर कैसे बता सकता हूं?सर्वर प्रतिक्रिया के साथ पुनर्विक्रेता मॉडल ऑब्जेक्ट को कैसे अपडेट करें?
बस मामले में - क्यों? क्योंकि सर्वर को सहेजने/अपडेट करने के दौरान कुछ फ़ील्ड की गणना हो सकती है। चूंकि अन्य क्लाइंट्स द्वारा समवर्ती अपडेट हो सकते हैं और मैं यह सुनिश्चित करना चाहता हूं कि वर्तमान में अपडेट करने वाला क्लाइंट अद्यतित है।
अब तक मैं सिर्फ पाया इस:
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);
यह इतना गंदा और एक ही समय है कि मुझे लगता है एक बेहतर तरीका होना चाहिए पर आम लगता है।
संपादित
कोड ऊपर केवल दो अलग-अलग कार्यों को दर्शाता है। मेरा लक्ष्य नहीं इकाई बनाने के बाद सर्वर को अद्यतन भेजने के लिए, लेकिन क्लाइंट पर स्थिति अद्यतन कर रहा है। यदि आप करेंगे, सर्वर के साथ राज्य सिंक्रनाइज़ करना।
जब मैं एक वस्तु पोस्ट:
var res = {foo: "bar"};
Restangular.all("resource").post(res);
सर्वर प्रतिक्रिया के साथ शरीर है:
{"foo": "bar", "id": 15}
... तो मैं Restangular अद्यतन और स्वचालित रूप से res
वस्तु restangularize चाहते हैं, तो यह है आईडी, put()
आदि
अब एक अलग/पूरक परिदृश्य हो सकता है। जब मैं एक Restangular वस्तु डाल:
var res = Restangular.one("resource", 15).get();
// returns {foo: "bar", id: 15}
res.put();
सर्वर हमेशा वस्तु की वर्तमान स्थिति है, जो हो सकता है के साथ उत्तर:
{"foo": "buzz", "id": 15}
... इसलिए मैं Restangular res
अद्यतन करने के लिए स्वचालित रूप से करने के बाद चाहते हैं यह पुट
वास्तव में इस के लिए एक प्रतिक्रिया देखना चाहते हैं। @mgonto, क्या कोई विशिष्ट कारण है कि यह पहले से क्यों नहीं हुआ है? हो सकता है कि डिफ़ॉल्ट आरईएसटी कार्यान्वयन POSTs और PUTs के बाद डेटा वापस न करें, केवल एक स्टेटस कोड? – jlb
हां, इस बात की कोई गारंटी नहीं है कि एक रेस्टी वेब सेवा ऑब्जेक्ट को इसे बनाए जाने, बदलने, आदि के बाद प्रश्न में वापस कर देगी। इसके लिए सामान्य रूप केवल $ scope.foo.put() है। (फ़ंक्शन सफलता (newFoo) {$ scope.foo = newFoo;})। –