2012-11-29 70 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