この質問は漠然としているように見えるかもしれませんが、実際には非常に具体的です。
私はこれを書き始めましたが、特定の言い回しがないと曖昧に聞こえることに気付きました。ですから、このように言いましょう。
顧客データを含む Order オブジェクトがあります。また、この例では、車の注文が 1 つあるとします。
車にはカテゴリ、製品、年、色があります。この例では、注文ページに 4 つのドロップダウンがあり、互いにカスケードしています。カテゴリが入力されます。製品が入力されます。年が入力されます。色が入力されます。
(私は Make と Model を使用するつもりでしたが、「Model」を使用すると混乱することに気付きました。笑)
私はいくつかの問題を抱えています:
- 複数のレイヤーのドロップダウンがあります。一人じゃなくて四人。
- 私のドロップダウン オブジェクトは特に相互に関連付けられていません。つまり、Cateogry の ID を使用して Products を入力しますが、Category を取得したときに Products が含まれていません。これは、KO の Web サイトにあるカートの例とは異なります。
- 私は上記のアーキテクチャにこだわっています。ドロップダウンを変更してから、サービス呼び出しを送信して、選択したドロップダウン ID に基づいて次のドロップダウンを取得する必要があります。オブジェクトを一緒にネストするようにサービス レイヤーを変更することはできません。
- My Order には、メーカー、モデル、年、色を示す子オブジェクトが付属しています。ただし、これらは異なるため、knockout.mapping キー付き配列とカスタム バインディング ハンドラーを使用してデータ オブジェクトを検索しています。ありがたいことに、最上位のオブジェクトが置き換えられた後は問題ないので、これを行う必要があるのは 1 回だけです。
特に重要なことを考慮して、関連するオブジェクトをマップするために knockout.mapping を使用しようとしています。
ただし、オブジェクトをノックアウトで作成することには完全にオープンです。
私が抱えている問題は、これが実際に災害に発展したことです.すべてが非同期であるため、ネスト内のネスト内のネストを除いて、適切な順序で物事を解決することは非常に困難です.
したがって、私の質問 - ノックアウトを完全に捨てることがここでの答えのように見えるところまで来ていますが、これは正しくないようです。とても近くにいるように感じますが、まだ正しく機能していません。(多くの場合、間違った順序でロードされます。) 残念ながら、コードが巨大であるため、実際に投稿することはできません。
問題は、それほど難しいことではないように思われるということです。ノックアウトとドロップダウン コンボの基本的なデザイン パターンが欠けているように感じます。カートの例を見ると、データが事前にすべてロードされていない限り、現時点では、マルチレイヤーのカスケード ドロップダウンはノックアウトでは実行できないのではないかと疑い始めています。
私は実際にデザインパターンを見逃していますか? もしそうなら、解明してください。そうでない場合は、先に進んでそう言ってください。賛同する人が多い方が採用されると思います。
更新 最初のコメントを受け取った後、私が試した解決策のいくつかについてあまり議論していないことに気付きました。
だから、基本的にはい、私は変更イベントをサブスクライブしようとしました。この問題の中心にあるのは、これらのドロップダウンをロードするためのすべての呼び出しがネットワーク呼び出しであるという事実であることを強調しておきます。
発生する問題は、変更イベントが複数回発生することです。1 回はドロップダウンをロードしたとき、もう 1 回は値がドロップダウンにバインドされたときに発生します。少なくとも、それは私の経験です。
最終的に発生するのは、サブスクリプションが複数回起動することです。その場合、負荷が複数回発生します。複数回起動したくないという事実は別として、ドロップダウンが正しくロードされないという問題がよくあります。私の推測では、ある時間は他の時間よりも「順不同で」到着したということです。
さまざまな努力で同様の結果が得られました。お互いのコールバック内に 5 つ、6 つ、または 7 つのネットワーク呼び出しをネストするなど、ハックなことに私を駆り立てているようです。そして、もっと良い方法があるに違いないようです。
同様の効果を得るために、計算されたオブザーバブルを試しました。MVCビューバッグなどを介して一度ロードしようとしました。何かを試すたびに、何かがロードされているか、knockout.mappingプラグインが奇妙に動作していることに悩まされています(既存のキー/マッピング関数を追加しないようです)ノックアウトオブザーバブル) または単に...他の奇妙な問題。
繰り返しますが、これはノックアウトでは不可能なことですか? 私たちの状況はあまりにも特殊ですか?または、このすべてを機能させるメソッド、関数、またはオブジェクトが不足していますか?