1

shell.htmlfor HotTowel テンプレートには次のものがあります。

    <!--ko compose: {model: router.activeItem, 
        afterCompose: router.afterCompose, 
        transition: 'entrance'} -->
    <!--/ko-->

これにより、慣例により適切なビューが自動的に挿入されます。HotTowel/Durandal アプリでのユーザーの役割に基づいて、さまざまなビューを挿入しようとしています。たとえば、2 つのビューがあり、

  1. productEditor_Admin.html
  2. productEditor_Superviser.html (これらの 2 つのビューの代わりに、以前は productEditor.html のみを使用していました。慣例により、すべてが機能していました)

単一の ViewModel のみ:

  1. productEditor.js

productEditor.jsここで、ユーザーの役割に基づいて挿入するビューを決定できるようにする関数が必要です。コンポジションのドキュメントで確認できますfunction strategy(settings) : promiseが、HotTowel テンプレートでこれを達成するための最良の方法がわかりません。誰もがすでに試して、それに対する答えを得ましたか?

4

2 に答える 2

3

ビュー モデルで 'viewUrl' プロパティを返すことができるので、うまくいけば、次のようなものがドアを開けてくれるでしょう ;-)。

define(function () {
    viewUrl = function () {
        var role = 'role2'; //Hardcoded for demo

        var roleViewMap = {
            'default': 'samples/viewComposition/dFiddle/index.html',
            role1: 'samples/viewComposition/dFiddle/role1.html',
            role2: 'samples/viewComposition/dFiddle/role2.html'
        };

        return roleViewMap[role];

    }

    return {
        viewUrl: viewUrl(),
        propertyOne: 'This is a databound property from the root context.',
        propertyTwo: 'This property demonstrates that binding contexts flow through composed views.'
    };
});
于 2013-05-10T13:07:10.030 に答える
0

PluralSight の John Papa の JumpStart コースをご覧になりましたか。

ここでそのアプリのソース コードを見てください: https://github.com/johnpapa/PluralsightSpaJumpStartFinal

App/Config.js ファイルに、デフォルトで次のように表示される他のルートを追加します。

 var routes = [{
        url: 'sessions',
        moduleId: 'viewmodels/sessions',
        name: 'Sessions',
        visible: true,
        caption: 'Sessions',
        settings: { caption: '<i class="icon-book"></i> Sessions' }
        }, {
        url: 'speakers',
        moduleId: 'viewmodels/speakers',
        name: 'Speakers',
        caption: 'Speakers',
        visible: true,
        settings: { caption: '<i class="icon-user"></i> Speakers' }
        }, {
        url: 'sessiondetail/:id',
        moduleId: 'viewmodels/sessiondetail',
        name: 'Edit Session',
        caption: 'Edit Session',
        visible: false
    }, {
        url: 'sessionadd',
        moduleId: 'viewmodels/sessionadd',
        name: 'Add Session',
        visible: false,
        caption: 'Add Session',
        settings: { admin: true, caption: '<i class="icon-plus"></i> Add Session' }
    }];

ここで同じロジックを使用して両方のビューにルートを追加できます。次に、productEditor.js で、router.navigateTo() メソッドを使用してナビゲートするビューとナビゲートするビューを決定できます。

于 2013-05-09T21:56:25.433 に答える