2011-07-14 20 views
36

Ben bir Backbone.js newbie. Sadece onunla oynuyordum. Modelin Görünüm ile ilgili olup olmadığını bilmek istiyorum. Sağlanan todos örneğinde, addOne yönteminde yeni bir Görünüm oluşturulduğunu ve yeni oluşturulan modelle ilişkili olduğunu ve eklendiğini görüyorum. Ben de benzer bir şey yapmaya çalıştığımızda Backbone.js Model Bağlantıyı Göster

window.AppView = Backbone.View.extend({ 
    // view code 
    addOne: function(todo) { 
      var view = new TodoView({model: todo}); 
      this.$("#todo-list").append(view.render().el); 
    } 
    } 

, ben "bağlamak yöntem tanımsız üzerinde bulunamıyor" şeklinde bir hata var.
window.TodoView = Backbone.View.extend({ 

    initialize: function() { 
      _.bindAll(this, 'render', 'close'); 
      this.model.bind('change', this.render); // I got the error at this place. 
      this.model.view = this; 
    } 
}); 

Bu sorunu çözmek için, ben görünümü kurucusuna bir param olarak yeni oluşturulan modeli geçmesi lazım ve bunu ilişkilendirmek için this.model = task inorder yapmak zorunda. ILLUSTRATORNG.

Ancak, todos örneğinin, böyle bir şeye sahip olmaması. Yeni model, todos örneğinde örtük olarak yeni görünümle nasıl ilişkilendirilir? Hiç de örtülü değil

Teşekkür

+0

Nerede görev görev var? –

+0

"this.model.bind" işlevine yaptığınız çağrıda doğru içeriği iletmeniz gerekiyor. Model bu bağlamda 'bunu 'kullanır, bu yüzden görünümü ve kendisinin oluşturmasını söylemeniz gerekir. this.model.bind ('change', this.render, this); ' –

cevap

37

, tam burada, bu çizgide açık açıklanmıştır:

var view = new TodoView({model: todo}); 

Bu yeni bir TodoView görünüm oluşturmakta ve addOne işlevin tek parametreye onun model özelliğini ayarlıyor (todo bir model olan).

Todos koleksiyonuna yeni bir model eklendiğinde, parametre olarak yeni modelle addOne yöntemi çağrılır.

Todos.bind('add', this.addOne); 

Sonra addOne yılında, yeni bir görünüm bu model için oluşturulan ve ilişki explicity {model: todo} yoluyla ayarlanır. Kodun sürümünden kaçırdığın şey bu, şüpheliyim.

Yapmaya çalıştığınız şey, görünümü ve modeli görünümün başlangıç ​​işlevine bağlamanızdır ve bu iyi bir şeydir, ancak bunu yaparsanız kendinizinkindesiniz demektir. model < -> kendinizle ilişkiyi görüntüleyin (modeli init işlevine bir parametre olarak ileterek çözdüğünüz).

+0

{model: todo} gibi ayarlamaya çalıştığımda, change.basically için bağlamanın tanımlanmadığı bir hatayı aldım. omurga modeline özgü olmayan normal yöntem :( – felix

+0

'{model: todo}' öğesini ayarlarsanız, kodunuzun bir kısmını göstermediniz. Bu bağlamda 'todo' değişkeninin boş olmadığından emin misiniz? –

+0

Soruyu yeni görev görünümünün oluşturulduğu kod parçasıyla güncelledim, hayır, boş değil, sıradan bir nesneydi. – felix