0

私はこれに慣れていないので、ご容赦ください。アイテム ビューを別のアイテム ビューに追加しようとしていますが、ネストされたビュー アイテムの 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 のネストされた ItemView はレンダリングまたは「空白の」ビュー/テンプレートのレンダリングではありません) のあとがきです。問題は、「ユーザー」が代わりに遅延オブジェクトを返すことです。

ここで何が起こっているかについてのアイデアはありますか?

4

1 に答える 1

1

Marionette.Async を使用していますか? render から遅延オブジェクトを返すことは、すべて非同期で行われるテンプレート、データ、およびレンダリングを Async が処理する方法を容易にするために必要です。

render が deferred を返さないようにする唯一の方法は、Marionette.Async を使用しないことです。FWIW、その解決策をお勧めします。非同期は、ビューで直接、IMO で行うべきではありません。これは、ビューの実装よりも 1 つ以上上のステップで抽象化されたアプリ ワークフローによって処理される必要があります。

于 2012-10-29T01:13:26.290 に答える