0

アプリケーションの顧客セクションのサブ ナビゲーションを構築するために、子ルーターを初期化しようとしています。

設定しようとしている URL は次のとおりです。

#customer/1/orders/1

shell.js で顧客ビューに到達するためのルートを定義しました

define(['plugins/router', 'durandal/app'], function (router, app) {
    return {
        router: router, 
        activate: function () {
            router.map([
                { route: 'customer/:id*splat', moduleId: 'customer/customer' }
            ]).buildNavigationModel();

            return router.activate();
        }
    };
});

顧客セクションのサブ ナビゲーションを含む顧客ビューを作成しました。ナビゲーションは、ルートにあった顧客 ID を使用します。このビューは、顧客のサブナビゲーションを表示する以外には何もしません。このビューで子ルーターを作成しました。

define(['plugins/router', 'knockout'], function (router, ko) {
    var childRouter = router.createChildRouter()
        .makeRelative({
            moduleId: 'customer',
            fromParent: true
        }).map([
            { route: 'orders/:orderId', moduleId: 'orders' }
        ]).buildNavigationModel();

    var activate = function(id) {

    };

    return {
        router: childRouter,
        activate: activate
    };
});

私の問題は、親ルーターにパラメーターがあるとルーティングが機能しないように見えることです。顧客ビューはルーティングされますが、注文ビューはルーティングされません。顧客セクションの下に、より多くのサブビューを配置することになります。

4

2 に答える 2

0

シンプルに保ち、トップレベルでいくつかの静的ルートから始めます

router.map([
    { route: 'customer/:id', moduleId: 'customer/customer' },
    { route: 'customer/:id/orders/:id', moduleId: 'customer/orders' },
    { route: 'customer/:id/xxx/:id', moduleId: 'customer/xxx' }
]).buildNavigationModel();

各顧客 (注文、xxx など) のライフサイクルを完全に制御するために、インスタンスはシングルトンではなくコンストラクター関数を返します。

define(['knockout'], function (ko) {

    var ctor = function(){
       ...
    };

    //this runs on every instance
    ctor.prototype.activate = function(id) {  // or function(orderId, xxxID)

    };

    return ctor;
});

詳細情報シングルトンとコンストラクター: http://durandaljs.com/documentation/Creating-A-Module.html

于 2013-11-04T15:25:15.290 に答える