5

olay dinleyicisi ekleyin.Koleksiyon benim koleksiyonuna yeni bir model eklediğinizde benim görünümünü güncellemek için çalışıyorum Omurga

PostsApp.Views.Form = Backbone.View.extend({ 
    template: _.template($('#form-template').html()), 
    render: function(){ 
     this.$el.html(this.template(this.model.toJSON())); 
    }, 
    events:{ 
     'click button' : 'save' 
    }, 

    save: function(e){ 
     console.log("is this working"); 
     e.preventDefault(); 
     var newname = this.$('input[name=name-input]').val(); 
     var newadress = this.$('input[name=adress-input]').val(); 
     this.model.save({name: newname, adress : newadress}); 
    } 


}); 

ya ben hala collection.add()

Diğer görmek daha yapmak zorunda: İlk sorum ben gibi, bu modeli kaydederken otomatik olarak koleksiyonuma bir model eklerim olduğunu Bence yeni model böyle bir 'ekle' olay dinleyicisi eklemek çalışıyorum:

PostsApp.Views.Posts = Backbone.View.extend({ 
    initialize: function(){ 
     this.collection.on('add', this.addOne, this); 

    }, 
    render: function(){ 
     this.collection.forEach(this.addOne, this); 
    }, 

    addOne: function(post){ 
     var postView = new PostsApp.Views.Post({model:post}); 
     postView.render(); 
     this.$el.append(postView.el); 
    } 
}); 

Bu sadece çalışmıyor ama initialize yöntemi eklediğinizde, bu sadece benim modelinde her şeyi kopyalar, sayfa ilk yüklenir.

cevap

13

Hayır .. Bir model.save yaptığınızda, sadece bir zombi modelini yaratacak (Eğer değil zaten Yeni model kaydedilirse toplama .i.e bir parçası) Herhangi koleksiyonun bir parçası değildir.

Yani eklenti olay koleksiyonu için tetiklenir edilmeyecektir. Eğer eklenti olay tetiklenebilir istiyorsanız, yeni model eklenecek olan koleksiyon daha sonra bilecek koleksiyonunun create yöntemini kullanın

.. Sonra

collection.create({model}); 

it would içten koleksiyonuna modeli eklemek ve add event

Ayrıca on

ile sabitlerken olayların yerine listenTo kullanmak daha iyi bir fikir yangın
this.listenTo(this.collection, 'add', this.addOne); 

Kod

PostsApp.Views.Form = Backbone.View.extend({ 
    template: _.template($('#form-template').html()), 
    render: function() { 
     this.$el.html(this.template(this.model.toJSON())); 
    }, 
    events: { 
     'click button': 'save' 
    }, 

    save: function (e) { 
     console.log("is this working"); 
     e.preventDefault(); 
     var newname = this.$('input[name=name-input]').val(); 
     var newadress = this.$('input[name=adress-input]').val(); 
     this.collection.create({ 
      name: newname, 
      adress: newadress 
     }); 
    } 
}); 

PostsApp.Views.Posts = Backbone.View.extend({ 
    initialize: function() { 
     this.listenTo(this.collection, 'add', this.addOne); 

    }, 
    render: function() { 
     this.collection.forEach(this.addOne, this); 
    }, 

    addOne: function (post) { 
     var postView = new PostsApp.Views.Post({ 
      model: post, 
      collection : this.collection 
     }); 
     postView.render(); 
     this.$el.append(postView.el); 
    } 
}); 
+0

sayesinde burada gereken bu collection.create ({modeli}); benim kodumda olmak –

+0

Yani temelde 'subView' için koleksiyonunda geçerdi ve bunu ben kurtarmak yönteminde tahmin –

+0

kullanmak gerekir subView' Yeni FormView oluştururken arasında tasarruf yönteminde' Bu nedenle tekrar geçmek zorunda Bir model yerine bir koleksiyon? –

İlgili konular