【问题标题】:Backbone.marionette nested ItemView returning deferred instead of elBackbone.marionette 嵌套的 ItemView 返回延迟而不是 el
【发布时间】:2012-10-18 04:54:42
【问题描述】:

我是新手,请多多包涵。我正在尝试将一个项目视图添加到另一个项目视图,但嵌套视图项目上的渲染方法返回一个延迟对象。

代码如下:

(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)。问题是“用户”返回了一个延迟对象。

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

【问题讨论】:

    标签: backbone.js marionette


    【解决方案1】:

    您正在使用 Marionette.Async?从渲染返回延迟对象对于促进异步处理模板、数据和渲染的方式是必要的,这些都是异步完成的。

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

    【讨论】:

    • 老兄,你是救命稻草!我使用的是教程中捆绑的 marionette.js 版本,它与 Marionette.Async 一起提供。我用你的 git repo 中的那个替换了这个主干.marionette 文件,现在一切正常。干杯!
    • 现在已弃用 :-(
    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多