0

私のアプリには、それらのレイアウトのレイアウトとビューがあります。レイアウトはログイン/ログアウト時にのみ変更されますが、他の特殊なケースはページロードです。適切なレイアウトをロードする必要があります。しかし、defaultAction私のレイアウトでは、戻った後は実際にはレンダリングされないため、ビューがレンダリングしようとすると、elに含まれているはずのレイアウトが存在しません。

// Filename: router.js
var app_router;
define( [ 'views/layouts/beta', 'views/beta/requestInvite', 'views/beta/login', 'views/app/dashboard' ],
function(betaLayout, requestInviteView, loginView, dashboardView) {
    var AppRouter = Backbone.Router.extend( {
        routes : {
            // Pages
            'login' : 'login',
            'dashboard' : 'dashboard',

            // Default
            '*actions' : 'defaultAction'
        },

        // Pages
        login : function() {
            loginView.render();
        },

        dashboard : function() {
            dashboardView.render();
        },

        // Default
        defaultAction : function(actions) {
            betaLayout.render();
            requestInviteView.render();
        }
    });

    var initialize = function() {
        app_router = new AppRouter;

        $('a').live('click', function() {
            var href = $(this).attr('href');

            // only navigate to real links
            if(href == undefined)
                return;

            app_router.navigate(href, {trigger: true});

            return false;
        });

        Backbone.history.start({pushState: true});
    };
    return {
        initialize : initialize
    };
});

ビューの前にレイアウトを完全にレンダリングするにはどうすればよいですか?

4

2 に答える 2

1

betaLayout.render()レンダリングが実際に完了したときに実行される、引数として受け取るコールバックを定義します。

たとえば、betaLayout.render()次のようになります。

render: function(callback) {
    /* code to render your element,
       using the following line when all
       asynchronous calls are complete */
    if (callback) callback();
}

そして、あなたdefaultActionはそれをそのように使用し、2番目render()をそのコールバックとして渡します。

betaLayout.render(requestInviteView.render);
于 2012-06-07T02:31:38.477 に答える
0

問題は、ビューが初期化される前にレイアウトがレンダリングされなかったため、elが空だったことです。私がしたことは、すべてのオブジェクトを変換して、インスタンスではなくオブジェクトを返し、初期化されたらそれらを許可することでした。このように、aを宣言してからaを宣言すると、'sが有効であることが保証されます。rendernew MyLayoutnew MyViewMyViewel

于 2012-06-07T03:16:51.890 に答える