5

我想使用 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() 视图渲染的函数被调用一次,但内容不会显示在页面中。

任何的想法?

4

2 回答 2

13

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


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

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

myModel.fetch();
于 2013-03-19T19:23:59.693 回答
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();
     }
});
于 2013-07-19T14:01:11.767 回答