4

Durandal Router でルートを動的に追加/削除する方法について教えてください。私が望むのは、ユーザーがログインした後、ログインしたユーザーのタイプに応じて特定のルートを追加または削除できることです。

visibleRoutes/allRoutes 配列にルートを追加/削除しようとしましたが、ノックアウト ライブラリからバインド例外が発生しました...

私はそれが一般的なシナリオであることを望んでいました...しかし、まだ解決策を見つけることができませんでした...この問題の修正を手伝ってください。

ありがとう。ワシム

コメントを投稿:

私は動的にルートを非表示/表示するためにこの機能を試しました...そして同様にallRoutes []からルートを追加/削除しようとしました...しかし、ノックアウト入札で例外が発生しました

showHideRoute: function (url,show) {

        var routeFounded = false;
        var theRoute = null;
        $(allRoutes()).each(function (route) {

            if (url === this.url) {
                routeFounded = true;
                var rt = this;
                theRoute = rt;
                return false;
            }
        });

        if (routeFounded)
        {
            if (show)
            {
                visibleRoutes.push(theRoute);
            }
            else
            {
                visibleRoutes.remove(theRoute);
            }
        }
    }
4

4 に答える 4

2

デュランダル 2.0 にはメソッドがなくなりましたvisibleRoutes。私は次のことが私のために働くことがわかりました。

router.reset();
router.map([
        { route: 'home', moduleId: 'home/index', title: 'Welcome', nav: true },
        { route: 'flickr', moduleId: 'flickr/index', title: '', nav: true }
])
.buildNavigationModel()
.mapUnknownRoutes('home/index', 'not-found');

これにより、以前のルートがすべて削除されます。現在のルートを維持したい場合は、router.routesプロパティを使用してルートの配列を再構築してみてください。

于 2014-01-31T01:59:23.490 に答える
0

私は同様の問題を抱えていました: まず、router.visibleRoutes()観測可能な配列です。つまり、値を変更すると、ルートが自動的に更新されます。ただし、この配列内の項目は観察可能ではないため、変更を加えるには、配列内の単一の項目を変更するだけでなく、配列全体を置き換える必要があります。

したがって、この配列で削除したい項目を見つけて、この項目なしで新しい配列を作成し、この新しい配列に設定するだけです。router.visibleRoutes()

たとえば、それが 3 番目の項目であることがわかった場合、それを行う 1 つの方法は次のとおりです。

router.visibleRoutes(router.visibleRoutes().splice(2, 1))

splice()アイテムが削除された新しい配列を返すことに注意してください。この新しい配列は に入れられrouter.visibleRoutesます。

于 2013-07-30T13:21:46.330 に答える