私の知る限り、デュランダル アプリでビュー モデル間でパラメーターをシームレスに渡す唯一の方法は、通常のハッシュ ベースの URL パラメーターを使用することです。
あなたの例では、orderId と repairOrder パラメーターを取るルーターを定義すると、URL は次のようになります。 http://localhost:60312/#/page/2/2
データの機密性が高くない場合は、これが最適なオプションです。ナビゲーション パラメーターはオープンのままにして、2 番目のビュー モデルで値を慎重に処理します。つまり、ビュー モデルが任意の値を適切に処理できるように設計します。ユーザーがパラメーター値を直接変更した場合でも、ビュー モデルはそれを正しく処理できる必要があります。
URL パラメーターを直接設定できると有利な場合がありますが、値を使用する前に値の整合性を確保するように注意する必要があります。
ただし、パラメーターを非表示にする必要がある場合は、いくつかの異なるオプションがあります。
暗号化: tea.js などの暗号化ライブラリを使用し、ナビゲーションのパラメーター値として追加する前に値を暗号化します。次に、もちろん、使用する前に 2 ページ目で復号化します。これにより、Durandal のrouter
ナビゲーションは正常に機能し、ユーザーが独自の値を指定することはできなくなります。
ユーザーが独自の値を入力できないようにする必要があり、余分な数 KB のオーバーヘッドを許容できる場合は、渡す必要があるパラメーターが数個だけである限り、これは適切なアプローチです。
共有データ モデル: 2 つのビュー モデル間で共有されるシングルトン モデルを使用します。このモデルは、必要に応じて手動で作成できrequired()
、基本的に、1 つ以上のビュー モデル間で共有されるアプリケーション状態のリポジトリとして機能します。これは問題なく動作しますが、大きなグローバル変数を持つようなものです - 使いすぎると厄介になる可能性があります.
VM を直接変更する: (シングルトン ビュー モデルの場合のみ) 2 番目のビュー モデルを
手動で変更require()
し、そのプロパティに移動する前にそのプロパティを設定します。