Knockout.js を使用してマスター詳細ビューに取り組んでいます。基本的に、すべて正常に動作しますが、1 つの小さな欠点があります。詳細ビューに現在表示されているアイテムが変更されるたびに、マスターはそれに応じて自身を更新しません。
基本的に、これが次の理由を理解しています。
- マスター ビューは に基づいており、
ko.observableArray
アイテムの挿入と削除のみを追跡します。更新されたアイテムには反応しません。 - アイテムが選択されるたび
ko.observable
に、詳細ビューのベースである に配置されます。 - 詳細ビューが更新されるとすぐに、配列には正しいデータが自動的に含まれますが (まったく同じオブジェクトを使用しているため)、UI への変更は反映されません (項目が挿入または更新されていないため)。
問題は、これをエレガントかつ正しい方法で処理する方法です。
現在、考えられる解決策は次の 2 つです。
- 配列内の各項目を でラップします
ko.observable
。このようにして、詳細ビューで行われた変更を検出し、それに応じて UI を更新します。 JSON.parse(JSON.stringify(...));
または: を使用して編集された項目を「コピー」replace()
し、複製されたオブジェクトを含む配列内のエントリ。オブジェクトが内部で削除および挿入されると、配列は変更を検出し、UI を更新します。
問題:
- 最初のソリューションは、大量のデータに対しては簡単には実行できません。少なくとも、すべてが遅くなります。
- 2 番目の解決策は問題なく機能しますが、... うーん、まあ、... 単純に良くありません ;-)
より良いアイデアはありますか?