Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Layout 主干视图未按顺序渲染_Layout_Backbone.js_Underscore.js_Requirejs_Router - Fatal编程技术网

Layout 主干视图未按顺序渲染

Layout 主干视图未按顺序渲染,layout,backbone.js,underscore.js,requirejs,router,Layout,Backbone.js,Underscore.js,Requirejs,Router,在我的应用程序中,我有这些布局的布局和视图。布局仅在登录/注销时更改,但另一个特殊情况是在pageload上,我需要加载正确的布局。但是,在mydefaultAction中,我的布局在返回后不会实际渲染,因此当视图尝试渲染时,它应该包含在其中的el不存在 // Filename: router.js var app_router; define( [ 'views/layouts/beta', 'views/beta/requestInvite', 'views/beta/login', 'vi

在我的应用程序中,我有这些布局的布局和视图。布局仅在登录/注销时更改,但另一个特殊情况是在pageload上,我需要加载正确的布局。但是,在my
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
    };
});

如何在查看之前完全渲染布局?

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
会像这样使用它,将第二个
render()
作为其回调传递

betaLayout.render(requestInviteView.render);

问题是,因为我的布局在视图初始化之前没有渲染,
el
是空的。我所做的是将我的所有对象转换为返回对象,而不是实例,并在初始化后让它们
渲染
。这样,当我声明一个
新的MyLayout
然后声明一个
新的MyView
时,我可以保证
MyView
el
是有效的。

我一开始尝试过,但结果是布局已经呈现了,除了视图之前已经初始化,所以
el
是空的。啊,因此,您在
requestInviteView
初始化过程中操纵
betaLayout
el
?由于看起来您是从所需文件返回实例,请尝试(如果您使用的是RequireJS 1.0)强制文件以正确的顺序执行和初始化。否则,如果可能,请将操作代码转换为
requestInviteView
render
,以便您可以显式地控制它的执行时间。