Backbone.marionette嵌套ItemView返回deferred而不是el

时间:2012-10-28 19:11:57

标签: backbone.js marionette

我是新手,所以请耐心等待。我正在尝试将项目视图添加到另一个项目视图,但嵌套视图项目上的render方法返回一个延迟对象。

以下是代码:

(function (ns, _, $, Backbone) {

///////////////////////////////////////////////////////////////////////////////////////
// Signup state
///////////////////////////////////////////////////////////////////////////////////////

var SignUp = Backbone.Marionette.ItemView.extend({
    template : "#signup-tmpl",
    events : {
        'click .signup' : 'signup'
    },

    signup : function () {
        console.log('signup clicked');
        ns.app.layout.app.show(ns.views.register);
    },
    onRender : function() {
        console.log('On render', this.el);

        var user = ns.views.user.render();
        // user returns an a deferred object
        // so the code below does not work

        this.$el.find('#user').html(test.el);


    }
});

ns.views.signup = new SignUp();

}(H5, _, $, Backbone));

我做了一些阅读,我找到的修复是渲染视图但是抓住它的el属性(Backbone.Marionette nested ItemView either not rendering or rendering "blank" view/template)。问题是“user”会返回一个延迟对象。

关于这里发生了什么的任何想法?

1 个答案:

答案 0 :(得分:1)

你正在使用Marionette.Async?从渲染中返回延迟对象是必要的,以便于Async使用异步完成的模板,数据和渲染。

使渲染不返回延迟的唯一方法是不使用Marionette.Async - 和FWIW,我建议解决方案。不应该直接在IMO视图中完成异步。它应该由应用程序工作流处理,在视图实现之上的一个或多个步骤处抽象。