Backbone.Marionette - 显示方法无法正确呈现..某些事情出错了

时间:2014-06-06 05:24:45

标签: backbone.js marionette

在我的应用中,我收到了show method问题。我的应用程序出错了。但我无法找到它。

如果我这样做,我的视图正确渲染(但这是错误的方法):

regions:{
  header:'header',
  content:'section',
  footer:'footer'
},

initialize:function(){
  console.log('initialized by layout')
},    

renderRegions:function(options){

  this.formData = _.defaults(options || {}, requireViews);

  if(this.formData.headerView){ //this is true.
      this.headerView();
      this.renderHeaderView();
  }
},

headerView:function(){

  this.appHeaderView = new AppHeaderView({model:this.model});
  return this.appHeaderView;
},

renderHeaderView:function(){
  $(this.header.el).html(this.appHeaderView.render().el) //working fine
  //but this is not workig: this.header.show(this.appHeaderView)..why not working?
}

为什么我使用" this.header.show" - 没有任何内容附加到标题。

任何人都会强调我在这里做错了什么?

我简化了我的整个过程,并在Jsfiddle中添加了以下链接:

Live Demo Here

1 个答案:

答案 0 :(得分:2)

您的代码中存在一些问题:

  1. 视图的model需要实例化,而不仅仅是模型类。
  2. 您绝对没有理由用您所拥有的内容覆盖ItemView的渲染方法。
  3. 您的操作顺序错误。 show只能在Layout已经在DOM中之后调用。
  4. 以下是解决问题的主要方法:

    var Controller = Backbone.Marionette.Controller.extend({
        initialize:function(){
           this.layout = new Layout;
           $('#wrapper').html(this.layout.render().el);
           this.layout.renderRegions();
        }
    });
    

    Updated FIDDLE


    另一个选项(以及我经常做的事情)是使用布局的onShow方法渲染区域。