2012-04-17 9 views
16

मुझे स्थिति संग्रह पर एक संग्रह में एक मॉडल डालना होगा। लम्बाई -2। संग्रह में अंतिम मॉडल हमेशा संग्रह में अंतिम मॉडल रहना चाहिए।मैं एक विशिष्ट अनुक्रमणिका में backbone.js संग्रह में मॉडल कैसे डालूं?

क्या मैं अब तक की कोशिश की:

मैं संग्रह "पेज" करने के लिए एक "पृष्ठ" मॉडल जोड़ा और फिर उन्हें अपने अनुक्रम बदलकर चारों ओर स्वैप करने के लिए करने की कोशिश की:

var insertedpage = Pages.at(Pages.length-1); 
var lastpage = Pages.at(Pages.length-2); 
insertedpage.set({sequence: Pages.length-1}); 
lastpage.set({sequence: Pages.length}); 

मैं भी करने की कोशिश की अंतिम पृष्ठ हटाएं, फिर एक नया पृष्ठ जोड़ें और फिर अंतिम पृष्ठ को वापस जोड़ें।

var lastpage = Pages.pop(); 
Pages.add({example1: example2}); 
Pages.push(lastpage); 

इनमें से कोई भी काम नहीं किया। नया जोड़ा गया पृष्ठ अभी भी संग्रह में अंतिम मॉडल के रूप में दिखाई देता है। क्या मुझे इसके बाद किसी प्रकार का ऑर्डर फ़ंक्शन कॉल करने की ज़रूरत है?

उत्तर

3

संक्षिप्त जवाब के लिए खेद है (समय प्रतिक्रिया करने के लिए नहीं है), लेकिन एक तुलनित्र समारोह को परिभाषित करने को देखो।

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

+0

धन्यवाद कि इसे ठीक किया गया! मैं प्रश्न विवरण में वर्णन करूंगा कि मैंने यह कैसे किया। – Dine

+1

@ एनआईसीसीएआई - लिंक मर चुका है। –

54

Backbone.Collection.add()options ऑब्जेक्ट लेता है जो सूचकांक को निर्दिष्ट करने के लिए at कुंजी का समर्थन करता है।

पास {at: index} निर्दिष्ट index पर संग्रह में मॉडल ब्याह करने के लिए।

उदाहरण:

Pages.add({ foo: bar }, { at: Pages.length - 2 }) 
+0

आपके उत्तर के लिए धन्यवाद। बात यह है कि मेरे पेजों को विशेषता "अनुक्रम" द्वारा क्रमबद्ध किया जाता है। नया मॉडल जोड़ते समय "एट" विकल्प पास करना अनुक्रम मानों को बदलना प्रतीत नहीं होता है। क्या कोई नया तरीका है जब मैं एक नया मॉडल जोड़ते समय उन्हें बदल सकता हूं और फिर अनुक्रम के आधार पर अपना संग्रह पुन: व्यवस्थित कर सकता हूं? – Dine

+0

धन्यवाद, यह बहुत उपयोगी है, पहले विकल्प पर नहीं पता था। यह मेरे लिए तय किया गया तुलनित्र समारोह था, हालांकि, मैं उस जवाब को स्वीकार करूंगा। – Dine

9

रोब Hruska रूप में एक ही सुझाव के साथ, options वस्तु में at साथ Backbone.Collection.add() का उपयोग करें।

Pages = new Backbone.Collection([ 
    {id:1, foo:'bar'}, 
    {id:2, foo:'barista'} /* Last model should remain last */ 
]); 

/* Insert new "page" not at the end (default) but length minus 1 */ 
Pages.add({id:3, foo:'bartender'}, { at: Pages.length - 1 }); 

Pages.at(0).id === 1; // true 
Pages.at(Pages.length - 2).id === 3; // true 
Pages.at(Pages.length - 1).id === 2; // true 

आपने कहा कि Pages विशेषता sequence के अनुसार क्रमबद्ध किया जा रहा है; क्या आपके पास पृष्ठ संग्रह पर परिभाषित comparator फ़ंक्शन है?

एक और सवाल, क्या आप वर्तमान में संग्रह में मौजूद सभी मौजूदा पृष्ठ मॉडल पर sequence को इस विशेषता को अपडेट करना चाहते हैं जब एक नया पृष्ठ दूसरे स्थान पर दूसरे स्थान पर जोड़ा जाता है? या वह विशेषता आपके मूल प्रश्न को पूरा करने का प्रयास था?

+0

धन्यवाद, इससे मदद मिली। – Dine

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