1

Knockout.js を使用してマスター詳細ビューに取り組んでいます。基本的に、すべて正常に動作しますが、1 つの小さな欠点があります。詳細ビューに現在表示されているアイテムが変更されるたびに、マスターはそれに応じて自身を更新しません。

基本的に、これが次の理由を理解しています。

  • マスター ビューは に基づいており、ko.observableArrayアイテムの挿入と削除のみを追跡します。更新されたアイテムには反応しません。
  • アイテムが選択されるたびko.observableに、詳細ビューのベースである に配置されます。
  • 詳細ビューが更新されるとすぐに、配列には正しいデータが自動的に含まれますが (まったく同じオブジェクトを使用しているため)、UI への変更は反映されません (項目が挿入または更新されていないため)。

問題は、これをエレガントかつ正しい方法で処理する方法です。

現在、考えられる解決策は次の 2 つです。

  • 配列内の各項目を でラップしますko.observable。このようにして、詳細ビューで行われた変更を検出し、それに応じて UI を更新します。
  • JSON.parse(JSON.stringify(...));または: を使用して編集された項目を「コピー」replace()し、複製されたオブジェクトを含む配列内のエントリ。オブジェクトが内部で削除および挿入されると、配列は変更を検出し、UI を更新します。

問題:

  • 最初のソリューションは、大量のデータに対しては簡単には実行できません。少なくとも、すべてが遅くなります。
  • 2 番目の解決策は問題なく機能しますが、... うーん、まあ、... 単純に良くありません ;-)

より良いアイデアはありますか?

4

1 に答える 1

1

IMHO - すべてのパフォーマンスの問題を知ることはできません。あなたが説明した最初の解決策は簡単で、あなたが望むことをします。考えられる他の方法は、含まれているタグを ko.computed(...) に再バインドすることです。

于 2012-09-24T18:14:22.807 に答える