3

マルチページ サイトの各ページには、ログアウト リンクが表示され、認証機能と状態を実装するビュー モデルにバインドされます。ここに単純化があります:

<a href="#" data-bind="click: logout">Logout</a>
...
function ViewModel() {
    var self = this;
    self.authenticated = ko.observable(true);                
    self.logout = function () {            
        self.authenticated(false);
    };
};

ログアウト時に、サイトのログイン ページにリダイレクトしたいと考えています。私はログアウト機能でそれを行うことができることを知っています:

self.logout = function () {
    self.authenticated(false);
    window.location.href = "login.html";
};

しかし、ビューとビュー モデルをより明確に分離するために、ビュー モデルの認証済みプロパティの変更にビューが応答するようにしたいと考えています。この例は機能しませんが、次のようなものを想定しています-スクリプトブロックは非表示になっていないため、常にリダイレクトが発生します。

<div data-bind="ifnot: authenticated()"><script>alert("window.location.href = 'login.html';");</script></div>

では、MVVM の方法でここをリダイレクトするにはどうすればよいでしょうか。皆さんのご支援に感謝します。Knockout は素晴らしいライブラリです。

4

1 に答える 1

4

これがログインページにリダイレクトされなかった理由:

<a href="login.html" data-bind="click: logout">Logout</a>

イベント チェーンを続行するために、バインドされたハンドラーで true を返さなかったからです。

self.logout = function () {        
    self.authenticated(false);
    return true;
};

解決しました!

于 2013-02-26T20:09:56.600 に答える