私によると、ko.compose はそれほど動的ではなく、Razor のレイアウトのように機能するようです。durandal では、できるだけ別のビューを作成してから、それらをルーターにリンクすることをお勧めします。私は John Papa の Hot-Towel テンプレートを使用しています。私の提案は、durandal ルーターとノックアウトを使用して (id を超える) データを渡すことに関するものです。
アプリ (shell.js、main.js、...) を初期化するときに
、最終的にフィルタリングするための設定を使用して、ルートをどこかに (shell.js または main.js) マップします。データを転送するルートについては、(:id) プロポーザルを使用して構築します
router.mapRoute('view/:id', moduleId, 'Customer Details', false);
ルートが必要な場所と時期
ジョセフ ガブリエルのソリューション ( https://stackoverflow.com/a/16036439/2198331 ) を参照して、必要な場所とタイミングでルートをフィルター処理できます。ルートをフィルタリングした後、routeInfoをハックしてパラメーター (文字列または selectedItem などのオブジェクト) を転送できます。
arearoutes = ko.utils.arrayFilter(router.visibleRoutes(), function (route) {
// mgpe has been set at app init
return route.settings.mgpe === 112;
});
転送するデータを使用して、フィルターの結果から routeInfo を拡張します
areaRoutes.forEach(function(ar){
ar.myItem = mydata; // or vm.selectedItem(); DEPARTURE LUGGAGE
}, areaRoutes);
あなたの(myItem)はこれらのルートにアタッチされているので、
これまたはこれらのルートはデータを一緒に運び、ルーターの同じオブジェクト(myItem)を更新しない限り、データを失うことはありません
function activate(adata){
vm.arrivalData(adata.routeInfo.myItem); // ARRIVAL LUGGAGE are here
}
ルートはネストされたルートを運ぶことができます ネスト
されたメニューのようなネストされたコンテキストに役立ちます。親ルートがアクティブなときに旅行を準備することで、子供のルートで遊ぶことができます。
router.activeItem.settings.areSameItem = function (currentItem, newItem, activationData) {
mybag = activationData.routeInfo; // TRAVEL (current) LUGGAGE are present here
}
注意:この回避策を使用する前に、セキュリティの問題を考慮する必要があります。私は durandal を初めて使用するため、これがルーターのルート ライフサイクルに重大な結果をもたらさないかどうかはわかりません。また、ルーターのルートが存続している間はオブジェクトが永続的に存在するため、オブジェクトの名前にも注意してください。