2014-02-25 78 views
0

我是骨幹和骨幹佈局管理器的新手。我正在嘗試呈現聯繫人列表。這裏是代碼Backbone Layout Manager項目的渲染列表

var ContactListView = Backbone.Layout.extend({ 
    tagName: 'li', 

    initialize: function(){ 
     console.log('ContactListView init'); 
     this.render(); 
    }, 

    render: function(){ 
     console.log('Rendering all items in the contact list'); 
     _(this.collection.models).each(function (contact){ 
      var contactlistitem = new ContactListItemView({model: contact}); 
      self.$el.append(contactlistitem.el); 
     }); 
    } 
}); 

var ContactListItemView = Backbone.Layout.extend({ 
    initialize: function(){ 
     this.render(); 
    }, 

    render: function(){ 
     console.log('called'); 
     var template = Handlebars.compile($('#contact-list-item').html()); 
     this.el.html(template(this.model)); 
    } 
}); 

一個片段,當我瀏覽網頁控制檯登錄「ContactListView初始化」,但不輸出「呈現在聯繫人列表中的所有項目」。爲什麼是這樣?在

beforeRender: function(){ 
    console.log('Rendering all items in the contact list'); 
    var self = this; 
    this.collection.each(function (contact) { 
     var contactlistitem = new ContactListItemView({model: contact}); 
     self.insertView(contactlistitem); 
    }); 
} 

別的地方在你的代碼,或許是:

+0

我懷疑'_(this.collection.models)'與它有關,因爲這看起來是無效的語法。也許你的意思是用直括號? '_ [this.collections.models]' – srquinn

+0

其中是試圖呈現「ContactListView」的代碼?你確定它正在實例化和渲染? – bejonbee

+0

我的回答有幫助嗎?如果是的話,你能把它標記爲正確的嗎?如果不是,你能澄清你仍然有疑問的地方嗎? – bejonbee

回答

0

如果this.collectionBackbone.Collection對象,那麼你應該使用

this.collection.each(function (contact) { 
    // work here 
}); 

渲染功能會是這個樣子(inspired by the LayoutManager docs)控制器或路由器,您將需要這樣的代碼來創建收集佈局:

// Create an instance of the list view. 
var layout = new ContactListView(); 

// Insert into the Document. 
layout.$el.appendTo("body"); 

// Render the View with the contacts collection. 
layout.render({ collection: myCollection });