2012-11-29 68 views
1

我使用我的導航和佈局管理路由器(是這樣嗎!?),並似乎有一個命中一個問題:骨幹DIV沒有粉刷

backboneQuote.Routers.ApplicationRouter = Backbone.Router.extend({ 

routes: { 
    "" : "home", 
    "edit/:id": "quoteEdit" 
}, 

initialize: function(){ 
    this.headerView = new backboneQuote.Views.headerView(); 
    $('.header').html(this.headerView.render().el); 

    if(!this.itemsView){ 
     this.items = new backboneQuote.Collections.ApplicationCollection([ 
      {id: 1, name: "item 1"}, 
      {id: 2, name: "item 2"}, 
      {id: 3, name: "item 3"} 
     ]); 

     this.itemsView = new backboneQuote.Views.itemsView({collection: this.items}); 
    } 
    this.content = $('.container'); 
}, 

home: function(){ 

    this.content.html(this.itemsView.render()); 

}, 

quoteEdit: function(id){ 
    this.editQuoteView = new backboneQuote.Views.editQuoteView({model: this.items.where({id: parseInt(id, 10)})}); 
    $('#editQuote').html(this.editQuoteView.render().el); 
    this.content.html($('#editQuote').html()); 
} 

});

我itemsView渲染的東西:

renderItem: function(model){ 
    var itemView = new backboneQuote.Views.itemView({model: model}); 
    itemView.render(); 
    $(this.el).append(itemView.el); 
    return this; 
}, 

render: function(){ 
    this.collection.each(this.renderItem); 
}, 

我點擊該導航應用回「家」的功能(click事件被解僱罰款)的元素,但「this.itemsView」的內容從來沒有似乎被放回到「this.content」div中。任何人都可以在這裏發現任何錯

作爲另一個巨大的幫助,如果任何人都可以提供任何他們在這裏看到的任何整體BackboneJS智慧,那麼這將是一個巨大的幫助。

+0

在home函數中,'render'不返回html。你需要調用'.el'屬性,就像你在'qouteEdit'中完成的那樣。我認爲這是一個錯誤而不是代碼中的錯字。 –

+0

@AmithGeorge你會認爲這可能是一個錯字,但不,我還在學習!我得到這個錯誤:「未捕獲的類型錯誤:無法讀取未定義的屬性'el'當我在末尾添加.el時... – benhowdle89

+0

您的意思是'this.itemsView.render()'返回undefined?你可以驗證itemsView中的render函數是否在結尾有'return this;'? –

回答

2

通常,在Backbone應用程序中,我們編寫render方法來設置視圖el的內容。代碼的責任是調用render以確保el顯示在正確的位置。

在路由器,

home: function(){ 

    this.content.html(this.itemsView.render()); 

}, 

你沒有訪問.el財產。首先修正是在那裏添加。

home: function(){ 

    this.itemsView.render(); 
    this.content.html(this.itemsView.el); 

}, 

這是假設您的收藏視圖有一個el屬性,它在默認情況下骨幹的意見往往有。

考慮到這是非常常見的任務,慣例是在每一個意見render方法的最後返回this

render: function(){ 
    this.collection.each(this.renderItem); 
    return this; 
}, 

home: function(){ 
    this.content.html(this.itemsView.render().el); 
}, 
+0

對不起,謝謝你。這幫助了很多,它並沒有解決我的問題,但有幫助! – benhowdle89