我想在此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()视图渲染的函数被调用一次,但内容不会显示在页面中。
有什么想法吗?
答案 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();
}
});