【问题标题】:MarionetteJS: Render only after fetch model successMarionetteJS:仅在获取模型成功后渲染
【发布时间】:2013-04-30 07:43:04
【问题描述】:

如何在 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

【问题讨论】:

    标签: backbone.js coffeescript marionette


    【解决方案1】:

    一种常见的方法是从控制器而不是视图调用 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);
    });
    

    【讨论】:

    • 在没有串行获取或竞争条件的情况下实现一次成功的并行获取的一种非常好的方法是使用 $.when ,如对类似问题的回答中所述:stackoverflow.com/a/12168628/271868
    猜你喜欢
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 2021-11-25
    • 2016-04-24
    相关资源
    最近更新 更多