आवेदनजावास्क्रिप्ट, संदर्भ खोने
मैं एक सरल वेब अनुप्रयोग है कि AngularJS के शीर्ष पर बनाया गया है पर काम कर रहा हूँ बिना अधिलेखित वस्तु। एप्लिकेशन ऑफलाइन और साथ ही ऑनलाइन काम करने में सक्षम होना चाहिए। जब उपयोगकर्ता ऑफ़लाइन है, तो डेटा में परिवर्तन स्थानीय रूप से संग्रहीत किया जाता है। इसलिए, पहचान-पत्र कि ऑफलाइन मोड में इस एप्लिकेशन के भीतर किया जाता है जब सर्वर पर अपलोड केवल अस्थायी पहचान-पत्र, वे प्रतिस्थापित हो जाता है
समस्या
डेटा है कि आवेदन में उपयोग किया जाता है जटिल वस्तुओं के होते हैं (अन्य वस्तुओं के संबंध/संदर्भ के साथ)। जब मैं सर्वर पर सहेज रहा हूं, तो मैं विचारों को नए "वास्तविक" आईडी के साथ अपडेट करना चाहता था। हालांकि, जावास्क्रिप्ट ऑब्जेक्ट्स के साथ काम करता है क्योंकि संदर्भ मैं ऐसा नहीं कर पा रहा हूं जो मैं चाहता हूं: $scope.data = newdata
यह $ scope.data को ओवरराइट नहीं कर रहा है लेकिन एक नई वस्तु बनाता है। पुराने डेटा का पुराना संदर्भ अभी भी वहां है।
सरलीकृत उदाहरण
var x = {id: 1, name: "myObject"}
var c = x // c = {id: 1, name: "myObject"}
x = {id: 2, name: "myNewObject"}
// c = {id: 1, name: "myObject"}
आप देख सकते हैं, ग अभी भी पुरानी वस्तु के लिए एक संदर्भ है। व्यवहार में, इसका कारण यह है कि मेरा दृश्य नए डेटा के साथ अपडेट नहीं किया गया है क्योंकि यह अभी भी पुराने डेटा से जुड़ा हुआ है। इस उदाहरण में, x के गुणों को ओवरराइट करने के लिए मुझे क्या चाहिए। मुझे यह वास्तविक रूप से करने की ज़रूरत है क्योंकि मेरी असली वस्तुएं जटिल हैं, हालांकि इसे किसी भी परिपत्र संदर्भ में प्रवेश नहीं करना चाहिए, क्योंकि इससे संभवतः ढेर ओवरफ्लो हो सकता है। यदि मैं बी के साथ ओवरराइट कर रहा हूं और इसमें गुण हैं जो बी नहीं मिला है, तो उन गुणों को हटा दिया जाना चाहिए।
क्या मैं ख में
गुणों के साथमुझे लगता है कि एक (पुराने वस्तु) में सभी गुण को अधिलेखित करता समारोह के कुछ प्रकार की जरूरत की जरूरत है (नई वस्तु)। सभी गुण जो एक में मौजूद हैं लेकिन बी में नहीं हैं उन्हें हटा दिया जाना चाहिए।
यह सुंदर अत्यधिक आकर्षित है। मैन्युअल रूप से सभी गुणों को लिखता है। – tylerjgarland