Изменение маршрута всегда вызывает передислокацию. Если вы не видите вид страницы входа в систему без ручного вызова m.redraw
, вероятно, это связано с ошибками в контроллере входа или просмотре, которые происходят во время изменения маршрута изменения маршрута - ошибки, условия отказа которых сбрасываются при повторном вызове m.redraw
.
Вот расширение вашего кода с видом входа и контроллером. mo_portal.logged_in
имеет значение true или false в зависимости от того, является ли пользователь одним из 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>