更改路线总是会触发重绘。如果您在没有手动调用m.redraw
的情况下看不到登录页面视图,则可能是由于登录控制器中的错误或在路由更改重绘期间发生的视图 - 当您m.redraw
再次调用时其失败条件被重置的错误。
这是带有登录视图和控制器的代码扩展。mo_portal.logged_in
根据用户是否是其中之一设置为真或假usersList
,因此我们可以测试成功和失败。
我取出了m.redraw
(我还将重定向逻辑放在主控制器中),一切正常。
var usersList = [
'john',
'alexia'
];
var mo_portal = {
username : '',
logged_in: false
};
var login = {};
login.controller = function(){
this.username = function( input ){
if( arguments.length ){
mo_portal.username = input;
mo_portal.logged_in = !!~usersList.indexOf( input );
}
return mo_portal.username;
};
};
login.view = function(ctrl){
console.log('in login view');
return [
m( 'input', { oninput : m.withAttr( 'value', ctrl.username ), value : ctrl.username() } ),
m( 'a[href=/home]', { config : m.route }, 'Login' )
];
};
var home = {};
home.controller = function(){
if (!mo_portal.logged_in) {
console.log('redirecting to login');
m.route("/login");
}
};
home.view = function(ctrl) {
console.log('in home view');
return m("div","HOME");
};
m.route( document.body, '/login', {
'/login' : login,
'/home' : home
} );
<script src="https://rawgit.com/lhorie/mithril.js/next/mithril.js"></script>