MarionetteJS:仅在获取模型成功后呈现

时间:2013-05-06 14:14:40

标签: backbone.js coffeescript marionette

如何在Marionette中提取模型之前推迟渲染?我可以在模型上听取更改事件,但随后会呈现两次。有优雅的解决方案吗?

Manager.module 'Views', ( Views, App, Backbone, Marionette, $) ->
    class UserDetail extends Marionette.ItemView
        template: 'manager.users.detail'


        initialize: =>
            @model = new App.Models.ManagerUser( )
            return

        onBeforeRender: =>
            @username = 'test' # Comes from URL
            @model.fetch()
            return

        serializeData: ->
            data = @model.toJSON()
            return data

1 个答案:

答案 0 :(得分:4)

一种常见的方法是从控制器而不是视图中调用fetch。这样可以避免在视图中处理路由事件。

这是一个演示技巧的小提琴。

http://jsfiddle.net/puleos/PHpCz/

编辑:(小提琴更新)

Mod.metaModel = new metaModel();
Mod.tagsCollection = new tagsCollection();

Mod.compositeView = new CompositeView({
    model: Mod.metaModel,
    collection: Mod.tagsCollection
});    

var metaPromise = Mod.metaModel.fetch({dataType: "jsonp"});
var tagsPromise = Mod.tagsCollection.fetch({dataType: "jsonp"});

metaPromise.done(function(data) {
    App.region.show(Mod.compositeView);
});