获取模型后渲染木偶区域

时间:2013-03-19 11:06:53

标签: javascript backbone.js marionette

我想在此thread中使用Derick Bailey在“通用问题解决方案”中描述的方法在获取模型后呈现视图。我将在此报告他的解决方案:

 MyView = Backbone.View.extend({
  initialize: function(){
    this.model.on("sync", this.render, this);
  },

  render: function(){ ... }
});


myModel = new MyModel({id: someId});
new MyView({
  model: myModel
});

myModel.fetch();

我的情况略有不同:我的视图位于区域布局中。如果我调用Marionette.Region.show()它可以工作,但视图会呈现两次。调用Marionette.Region.attachView()视图渲染的函数被调用一次,但内容不会显示在页面中。

有什么想法吗?

2 个答案:

答案 0 :(得分:13)

您可以等到模型同步后再渲染视图


var myView = new MyView({
  model: myModel
});

myModel.on("sync", function(){
  myRegion.show(myView);
});

myModel.fetch();

答案 1 :(得分:4)

我提出了一种稍微不同的方法。我需要将自己的模型加载到initalize中,因此Derick的方法并不适合我。有几个原因我不想在这里解释。但我来了是这样的:

我创建了一个使用加载指示器和微调器调用的默认模板,我将其附加到视图模板。我有一个名为updateView的方法,一旦模型同步并用真实模板替换加载模板并在之后调用render(),就会触发该方法。

也许有人也会发现它很有用。

var myView = new MyView({
     template: loader,
     initialize : function(){
        this.model = new MyModel();
        this.model.on("sync", this.updateView, this);
        this.model.fetch();
     },
     updateView : function(){
        this.template = myTemplate;
        this.render();
     }
});