2013-04-11 27 views
6

मैंने अपने संग्रह में एक मॉडल जोड़ा और model.save किया डेटा सर्वर पर सहेजा जाता है।collection.fetch ({add: true}) कैसे काम करता है?

इसके बाद मैं collection.fetch ({add: true}) कॉल करता हूं। आदर्श रूप से केवल एक मॉडल को सर्वर से वापस किया जाना चाहिए अर्थात नए जोड़े गए लेकिन मैं पूरे संग्रह को क्रोम डेवलपर्स टूल में वापस प्रसारित कर रहा हूं।

मैं उलझन में हूं। यह वास्तव में कैसे काम करता है?

उत्तर

14

के रूप में एक ऐड-ऑन सिरिल एन के जवाब देने के लिए (जो अनिवार्य रूप से डिफ़ॉल्ट व्यवहार का वर्णन करता है, और मुझे लगता है कि पर्याप्त होना चाहिए), मैं अधिक अच्छी तरह से 3 झंडे की भूमिका की व्याख्या करना चाहते हैं:

  • add: या नहीं, रीढ़ बना सकते हैं और अभी तक जो मॉडल मौजूद नहीं है संग्रह में जोड़ने चाहिए (यानी, जिसका आईडी संग्रह में नहीं हैं)
  • remove: या नहीं, रीढ़ संग्रह से निकाल देना चाहिए मॉडल जिन्हें सर्वर से वापस नहीं लाया गया था (यानी, जिनकी आईडी नहीं लाई गई डेटा थी)
  • merge: या नहीं, रीढ़ मॉडल जो पहली दो श्रेणियों में नहीं हैं

अद्यतन करना चाहिए (पहले से ही संग्रह में, और सर्वर से वापस लाया) हालांकि, मैं आगे सामान्य के बारे में थोड़ा विस्तार करना चाहते विधि का व्यवहार (यह कॉलबैक के रूप में Collection#set विधि का उपयोग करता है, इसलिए यह Collection#set का व्यवहार है)। बैकबोन मॉडल मॉडल तैयार करता है, जिसका अर्थ यह है कि यह विधि की शुरुआत में नकली, अस्थिर मॉडल बनाता है (यदि वे जोड़े नहीं गए हैं तो वे केवल अस्थिर हैं)। इससे अप्रत्याशित व्यवहार हो सकते हैं: क्योंकि यह मॉडल बनाता है, की प्रारंभिक विधि निष्पादित की जाती है।

बैकबोन 1 के बाद से, साइड-नोट के रूप में भी।0, Collection#reset झंडा पेश किया गया था कि अगर आप अपने संग्रह पुनर्स्थापित करने के लिए जब प्राप्त करते समय चाहते हैं (इसलिए यह एक कॉलबैक के रूप में इस पद्धति का उपयोग करता है)। इससे पहले, यह Collection#fetch विधि के डिफ़ॉल्ट व्यवहार था।

खैर, दोनों जवाब के साथ आप हर जानकारी आपको चाहिए मुझे लगता है कि होना चाहिए।

4

जब आप collection.fetch({add:true} पर कॉल करते हैं, तो बैकबोन संग्रह में वस्तुओं की पूरी सूची (इसलिए संपूर्ण संग्रह जो आप Chrome डेवलपर टूल में देखते हैं) के साथ सर्वर से अनुरोध करेंगे, लेकिन फिर, संग्रह ऑब्जेक्ट में पूरे संग्रह को पुनः लोड करने के बजाय बैकबोन (जावास्क्रिप्ट) में, बैकबोन संग्रह संग्रह का "स्मार्ट" अपडेट करता है।

सेट विधि मॉडल की पारित सूची के साथ संग्रह का "स्मार्ट" अपडेट करता है। यदि सूची में कोई मॉडल अभी तक संग्रह में नहीं है, तो इसे जोड़ा जाएगा; यदि मॉडल पहले से ही संग्रह में है इसके गुण विलय हो जाएंगे; और यदि संग्रह में मॉडल शामिल हैं जो सूची में मौजूद नहीं हैं, तो उन्हें हटा दिया जाएगा। सभी के रूप में उपयुक्त "जोड़ें", "निकालें" और "परिवर्तन" ईवेंट निकाल दिए जाते हैं। यदि आप व्यवहार को कस्टमाइज़ करना चाहते हैं, तो आप इसे विकल्पों के साथ अक्षम कर सकते हैं: {add: false}, {remove: false}, या {merge: false}।

स्रोत: http://backbonejs.org/#Collection-set

सभी स्मार्ट काम है कि के लिए जावास्क्रिप्ट में, ग्राहक के पक्ष बनाया गया है, लेकिन, रीढ़ अनुरोध सर्वर से पूरे संग्रह क्या यह स्थानीय (क्लाइंट साइड) में है के साथ तुलना करना ।

(मुझे उम्मीद है कि मैं स्पष्ट हूं;))।

संबंधित मुद्दे