क्या कोई नया मॉडल आइटम backbone.js Collection
के बीच में डालने का एक सीधा तरीका है और फिर सही स्थिति में नया आइटम शामिल करने के लिए संग्रह के View
को अद्यतन करें?किसी आइटम को backbone.js संग्रह में सम्मिलित करना
मैं किसी सूची से आइटम जोड़ने/हटाने के लिए नियंत्रण पर काम कर रहा हूं। प्रत्येक सूची आइटम का अपना Model
और View
है, और मेरे पास पूरे संग्रह के लिए View
भी है।
प्रत्येक आइटम दृश्य में Duplicate
बटन है जो आइटम के मॉडल को क्लोन करता है और उसे क्लिक किए गए आइटम के नीचे इंडेक्स स्थिति पर संग्रह में डाल देता है।
संग्रह में आइटम डालने से सीधा था, लेकिन मुझे संग्रह दृश्य को अपडेट करने का तरीका पता लगाना मुश्किल हो रहा है। मैं कुछ इस तरह की कोशिश कर दिया गया है:
ListView = Backbone.View.extend({
el: '#list-rows',
initialize: function() {
_.bindAll(this);
this.collection = new Items();
this.collection.bind('add', this.addItem);
this.render();
},
render: function() {
this.collection.each(this.addItems);
return this;
},
addItem: function (item) {
var itemView = new ItemView({ model: item }),
rendered = itemView.render().el,
index = this.collection.indexOf(item),
rows = $('.item-row');
if (rows.length > 1) {
$(rows[index - 1]).after(rendered);
} else {
this.$el.append(rendered);
}
}
}
इस कार्यान्वयन तरह का काम कर रहा है, लेकिन मैं अजीब कीड़े हो रही है जब मैं एक नया आइटम जोड़ने। मुझे यकीन है कि मैं उनको हल कर सकता हूं, लेकिन ...
मेरे सिर में एक आवाज है जो मुझे बताती है कि ऐसा करने का एक बेहतर तरीका है। मैन्युअल रूप से यह पता लगाने के लिए कि नया ItemView
कहां डालना है वास्तव में हैकी - संग्रह दृश्य को पहले से संग्रह को पुन: प्रस्तुत करने के बारे में नहीं पता होना चाहिए?
कोई सुझाव?
मुझे इसे काम करने के लिए 'रेंडर' विधि के अंदर '(.item-row) .remove()' में एक कॉल जोड़ना पड़ा, लेकिन यह एक अच्छा समाधान है। (अन्यथा पुन: प्रस्तुत किए गए आइटम मौजूदा प्रस्तुत वस्तुओं के अंत में जोड़े जा रहे थे।) सहायता के लिए धन्यवाद! –
ओह, आप संग्रह के माध्यम से लूपिंग करने से पहले '$ el' को साफ़ करने के लिए' el.empty() 'कर सकते हैं :) – sntran
यह ठीक है कि मैं वर्तमान में संग्रह में आइटम कैसे जोड़ रहा हूं। यह संग्रह में सही जगह पर नया आइटम डाल रहा है।मैंने देखा कि मेरे ऊपर उपरोक्त मेरी टिप्पणी में कुछ टाइपो हैं: मैं '$ ('। Item-row ') को कॉल कर रहा हूं। संग्रह को अंतिम बार बनाए गए आइटम को साफ़ करने के लिए हटाएं() '। यह सिर्फ दृश्य को रीसेट कर रहा है। इसके बारे में सोचने के लिए आओ, एक 'रीसेट' विधि है जो मैं चाहता हूं जो कर सकता है। मैं उसे कॉल करने का प्रयास करूंगा और फिर 'रेंडर' कहूंगा। –