2011-06-08 10 views
20

क्या ये दो कदम मॉडल को हटाने के लिए अनिवार्य हैं?एक संग्रह में एक बैकबोन मॉडल को एक चरण में नष्ट करना?

var model = collection.get(id); 
model.destroy(); 
collection.remove(model); 

क्या किसी संग्रह को हटाए जाने पर मॉडल को नष्ट करने का कोई तरीका नहीं है?

+12

मुझे यकीन है कि रीढ़ की किस संस्करण का उपयोग कर रहे थे जब आप इस प्रश्न पूछा, लेकिन AFAIK कम से कम 0.5.3 में जब आप '.destroy()' अपने मॉडल पर कॉल नहीं कर रहा हूँ, रीढ़ उसे निकाल देता है सर्वर से और (बशर्ते कि सफल हो) तो इसे अपने संग्रह से स्वचालित रूप से हटा दें। –

+0

अच्छा। मैं संस्करण 0.3.3 –

+0

भविष्य के पाठकों के लिए नोट का उपयोग कर रहा था: रीढ़ की हड्डी इसे सभी संग्रहों से हटा देगा, न केवल model.collection। संग्रह मॉडल घटनाओं को सुनते हैं और 'नष्ट' एक निकालने का कारण बनता है (संबंधित घटनाओं के साथ)। – Crisfole

उत्तर

36
Model.bind("remove", function() { 
    this.destroy(); 
}); 
... 
var model = new Model(); 
... 
collection.remove(model); 

संग्रह से मॉडल को हटाने से "remove" ईवेंट ट्रिगर होता है।

तो यदि आप चाहते हैं, तो आप उन्हें बाध्य करने और खुद को नष्ट करने के लिए मॉडल प्राप्त कर सकते हैं।

+1

इसके लिए धन्यवाद, हालांकि यह काफी अनजान आईएमओ है। क्या कोई कारण है कि संग्रह पर कॉल करने के दौरान आप मॉडल को नष्ट नहीं करना चाहते हैं (कम से कम पर्याप्त कारण यह नहीं है कि यह डिफ़ॉल्ट व्यवहार न हो)। क्या यह गिटूब पर फीचर अनुरोध के रूप में बढ़ने लायक है? – calumbrodie

+13

@किस्मिफेस संग्रह मॉडलों पर विचारधारा (डेटाबेस शर्तों में) हैं। अगर मैं निर्णय लेता हूं कि आपको व्यू (संग्रह) में मॉडल एक्स नहीं देखना चाहिए तो मॉडल एक्स को क्यों नष्ट किया जाएगा? – Raynos

+1

यह एक अच्छा सादृश्य है। मुझे एहसास नहीं हुआ कि वे काफी निराश थे (मेरे सभी कोड अब तक संग्रह और मॉडल के बीच काफी कठोर संबंध हैं)। स्पष्टीकरण के लिए धन्यवाद। – calumbrodie

1

किसी भी मॉडल को गुजरने के बिना संग्रह.reset() को कॉल करना पूरे संग्रह को खाली कर देगा।

http://backbonejs.org/#Collection-reset

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