3

ルートへのアクセスを条件付きでブロックしようとしています。これはguardRouteでできると思います: http://durandaljs.com/documentation/Router/

function guardRoute(routeInfo, params, instance) : object- ルートがアクティブ化される前に、guardRoute 関数が呼び出されます。この関数にプラグインして、要求されたルートに基づいて許可、拒否、またはリダイレクトするカスタム ロジックを追加できます。許可するには、true を返します。拒否するには、false を返します。リダイレクトするには、ハッシュまたは URL を含む文字列を返します。これらの値のいずれかに対して promise を返すこともできます。

ただし、どのルートにアクセスする必要があるかを指定する方法や、アクセスを拒否する必要がある場合に別のビューに再ルートする方法がわかりません。誰かがこの方法でその使用例を投稿できますか?

4

2 に答える 2

6

guardRouteなどでルーターをアクティブ化する前に使用する必要がありますshell.js。この例は、Durandal 2.0 アルファ サイトから取得したものです。私の知る限り、guardRoute は 1.2 から変更されていませんが、ブレークポイントを設定すると、1.2 に渡される引数を把握できます。原則として、trueナビゲーションを許可するために戻りfalse、それを防ぐために、hashまたはurl値をリダイレクトします。

define(['plugins/router'], function (router) {

    // Redirecting from / to first route in route.map
    router.guardRoute = function(routeInfo, params, instance){
        if (params.fragment === ''){
            return routeInfo.router.routes[0].hash;
        }
        return true;
    };
    ...    

    return {
        ...
        router: router,
        activate: function () {
            router.map([
               ---
            ]);

            return router.activate();
        }
    };
});
于 2013-06-13T15:06:33.073 に答える
1

私は durandaljs 2.0 の初心者で、数週間しか使用していないため、これが最初のつまずきの 1 つでした。以下の私のコードを参照してください

router.guardRoute = function (routeInfo, params, instance) {
    var insecureRoutes = ['login', 'terms','signup','password'];
    if ($.inArray(params.fragment, insecureRoutes) || mymodule.isAuthenticated()) {
        return true;
    } else {
        return 'login/' + params.fragment;
    }
};

このようなログインページのルートも定義します

{ route: 'login/(:returnroute)', moduleId: 'viewmodels/login', nav: false },

これにより、必要に応じてリターン ルートを指定できるため、ログイン後に、ユーザーが最初に行こうとしていた場所にユーザーをリダイレクトできます。それが誰かに役立つことを願っています

于 2013-10-28T19:38:39.337 に答える