在我的应用中,我有这些布局的布局和视图。布局仅在登录/注销时更改,但另一个特殊情况是在页面加载上我需要加载正确的布局。但是,在我的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
};
});
如何在观看前完全渲染我的布局?
答案 0 :(得分: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
会像这样使用它,并将第二个render()
作为其回调传递。
betaLayout.render(requestInviteView.render);
答案 1 :(得分:0)
问题是因为我的布局在我的视图初始化之前没有渲染,所以el
为空。我所做的是转换所有对象以返回对象而不是实例,并在初始化后让它们render
。这样,当我声明new MyLayout
然后new MyView
时,我可以保证MyView
的{{1}}有效。