ルートを変更すると、常に redraw がトリガーされます。手動で呼び出さないとログイン ページ ビューが表示されない場合は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>