如果尚未获取模型,如何防止Backbone.Marionette呈现视图?

Rud*_*ing 12 backbone.js marionette

在我的骨干.Marionette应用程序我有一个模型,需要一个Id属性来构建它的URL.因此,我通过传递一个Id来创建模型,将其添加到视图中然后获取模型:

   model = new Model({_id:id})               
   view = new View({model:model})                               
   app.content.show(view)                                                    
   model.fetch()
Run Code Online (Sandbox Code Playgroud)

我希望视图只在获取模型后才开始渲染,但Marionette会立即渲染模型,导致我的模板渲染失败,因为预期的属性不存在.任何解决方法?

我正在尝试做一些类似于接受的答案:将 一个Backbone模型绑定到Marionette ItemView - 阻止.fetch()?

但是,虽然这与骨干有关,但正如答案中所述,Marionette会自动呈现视图.

另请参阅: Backbone Marionette在获取完成之前显示

Jup*_*upo 10

以上两个答案都有效.
这是我喜欢使用的另一种方式(感觉更多的backboney).

将视图直接绑定到模型
完成模型提取后,将运行您指定的函数.这可以通过模型集合来完成.

var Model = Backbone.Model.extend({});
var model = new Model();
model.fetch();

var View = Marionette.ItemView.extend({
    model:model,
    initialize: function(){
        this.model.bind("sync", this.render, this);// this.render can be replaced
    }                                              // with your own function
});                               

app.region.show(new View);                                           
Run Code Online (Sandbox Code Playgroud)

这也使您可以随时获取.

  • `.show()`调用`.render()`在它传递的视图上,这样当你调用`.show(new View)`并再次调用`model:sync`时这种方法呈现一次. (2认同)

And*_*bbs 7

如果你真的想要在获取模型之前阻止渲染,你应该重新排序你的调用,如下所示:

model = new Model({_id:id});
view = new View({model:model});
model.fetch({success: function () {
  app.content.show(view);
});
Run Code Online (Sandbox Code Playgroud)

或者,您应该考虑立即渲染并利用Marionette的空白状态支持.