सबसे पहले, this पोस्ट चीजों को थोड़ा सा समझा सकता है। यह आपका सटीक प्रश्न नहीं है, लेकिन उत्तर के कारण समान हैं।
लेकिन, इनवर्ड्स की स्पष्ट समझ प्राप्त करने के लिए, आपको directed graphs से परिचित होना चाहिए। तत्काल स्पष्ट नहीं होने पर, निर्देशित ग्राफ belongsTo
और hasMany
के पीछे विचार को ईंधन देते हैं।
लेकिन चलिए विशिष्टताओं पर वापस आते हैं। आइए उनका उदाहरण लें, इसे और अधिक यथार्थवादी बनाने के लिए केवल कुछ चीजों को खत्म करें।
App.Post = DS.Model.extend({
comments: DS.hasMany('comment', { inverse: 'post' })
});
App.Comment = DS.Model.extend({
post: DS.belongsTo('post', { inverse: 'comments' })
});
यह एक और वास्तविक दुनिया का उदाहरण है। प्रत्येक पोस्ट में कई टिप्पणियां हो सकती हैं, जबकि एक टिप्पणी बिल्कुल एक पोस्ट से संबंधित होनी चाहिए। समझ में आता है। जैसा कि आप देख सकते हैं, वे उलटा एक दूसरे को संदर्भित करते हैं। लेकिन एक उलटा क्या है? एक व्यस्त रिश्ते बस वर्णन करता है कि दूसरी तरफ दो नोड्स के बीच किनारे को क्या कहा जाता है। उदाहरण के लिए, इस तस्वीर को देखने के:
आप उन दोनों के बीच एक भी बढ़त के साथ दो नोड्स देखेंगे। Post
ऑब्जेक्ट के परिप्रेक्ष्य से, किनारे को comments
कहा जाता है। यदि आप उस किनारे से जुड़े नोड को प्राप्त करना चाहते हैं, तो आप post.get('comments')
पर कॉल कर सकते हैं। लेकिन Comment
ऑब्जेक्ट के परिप्रेक्ष्य से, किनारे को post
कहा जाता है। यदि आप Comment
ऑब्जेक्ट का उपयोग करके उस किनारे से जुड़े नोड को प्राप्त करना चाहते हैं, तो आपको comment.get('post')
पर कॉल करना होगा। यही एक उलटा है। यह वर्णन करता है कि अलग-अलग वस्तुएं एक ही रिश्ते को संदर्भित करती हैं। अलग नाम, एक ही किनारे। स्पष्ट रूप से उलटा घोषित करके, आप एक वस्तु को बताते हैं कि अन्य ऑब्जेक्ट किनारे को कॉल करता है।
यह महत्वपूर्ण क्यों है? खैर, एम्बर-डेटा को यह जानने की जरूरत है कि यह संबंधों का सहारा दे सकता है। उदाहरण के लिए, मान लें कि आपके पास निम्न कोड है:
var post = store.find('post', '1');
var newComment = store.createRecord('comment', {});
...
post.get('comments').addObject(newComment);
आपने जो किया वह एक नई टिप्पणी बना रहा है और इसे किसी मौजूदा पोस्ट ऑब्जेक्ट से कनेक्ट कर रहा है। एक साधारण पर्याप्त उपयोग मामले। लेकिन एक समस्या है: आपने केवल टिप्पणी के बारे में पोस्ट को बताया, इसके विपरीत नहीं। आपने पोस्ट को बताया कि आपने टिप्पणी को जोड़ा है, लेकिन आपने टिप्पणी नहीं दी कि आपने इसे पर पोस्ट किया है। लेकिन एक उपयोगकर्ता के रूप में, आप उम्मीद करते हैं कि दोनों एक ही समय में हों। खैर, वे करते हैं, और ऐसा इसलिए है क्योंकि एम्बर-डेटा आपके लिए करता है। व्यस्त संबंधों के नामों का उपयोग करते हुए, एम्बर-डेटा सुनिश्चित करता है कि जब आप एक करते हैं, तो दूसरा भी होता है।आप ऐसा करते हैं जब:
post.get('comments').addObject(newComment);
एंबर-डाटा, पर्दे के पीछे, वास्तव में करता है: है
post.get('comments').addObject(newComment);
newComment.set('post', post);
यही कारण है कि एंबर-डाटा व्युत्क्रम संबंध की जरूरत है: तो यह बिना अखंडता को बनाए रखने कर सकते हैं आपको इसके बारे में चिंता करने की ज़रूरत है।
अब इसे पूरी तरह से समझें - बहुत बहुत धन्यवाद। मुझे लगता है कि एम्बर डॉक्स एक बेहतर उदाहरण का इस्तेमाल कर सकते थे। – ncksllvn
अच्छा स्पष्टीकरण – sarmahdi