Bir backbone.js Collection
'un ortasına yeni bir model öğesi eklemek ve daha sonra yeni öğeyi doğru konuma eklemek için koleksiyonun View
güncelleştirmesini sağlamanın kolay bir yolu var mı?Bir maddeyi bir backbone.js koleksiyonuna ekleme
Listeden öğeler eklemek/silmek için bir denetim üzerinde çalışıyorum. Her liste öğesinin kendi Model
ve View
vardır ve tüm koleksiyon için de bir View
sahibiz.
Her madde görünümü, öğenin modelini klonlayan ve tıklatılan öğenin altındaki dizin konumuna toplayan bir Duplicate
düğmesine sahiptir.
Öğeyi koleksiyona eklemek çok kolaydı, ancak koleksiyon görünümünü nasıl güncelleyeceğimi bulmakta zorlanıyorum.
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);
}
}
}
Bu uygulama çeşit çalışıyor, ama yeni bir öğe eklemek zaman garip hatalar alıyorum: Böyle bir şey çalışıyorum. Eminim bunları çözebilirim ama ...
Kafamda bir ses var, bunu yapmanın daha iyi bir yolu olduğunu söylüyor. Yeni bir ItemView
numaranın nereye yerleştirileceğini manuel olarak belirlemek zorundaysa, koleksiyon görünümü koleksiyonun nasıl yeniden oluşturulacağını bilmemeli mi?
Herhangi bir öneriniz var mı?
Bunun işe yaraması için 'render 'yönteminin içinde' (.item-row) .remove() 'adlı bir çağrı eklemeliydim, ancak bu iyi bir çözüm. (Aksi takdirde, iadeli ürünler mevcut işlenmiş kalemlerin sonuna eklenmiştir.) Yardım için teşekkürler! –
Oh, bunu yapmak için şunu yapabilirsin. $ El.empty() '' $ el 'toplayarak temizlemeden önce topla :) :) – sntran
Tam olarak koleksiyona şu anda öğe ekliyorum. Yeni eşyayı koleksiyonda doğru yere yerleştiriyor.Yukarıda yaptığım yorumda bir çift yazım hatası olduğunu fark ettim: '$ ('. Item-row ')' i çağırıyorum.sonraki son işlemin oluşturulduğu sırada oluşturulan öğeleri silmek için remove() 'i çağırıyorum. Sadece manzarayı sıfırlıyor. Bunu düşünmeye gel, istediğimi yapabilecek bir “reset” yöntemi var. Bunu çağırmayı ve sonra 'render' demeyi deneyeceğim. –