Layout 主干视图未按顺序渲染
在我的应用程序中,我有这些布局的布局和视图。布局仅在登录/注销时更改,但另一个特殊情况是在pageload上,我需要加载正确的布局。但是,在myLayout 主干视图未按顺序渲染,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
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
,以便您可以显式地控制它的执行时间。