StackOverflow コミュニティの助けを借りて、次の例に基づいてダーティ フラグの実装を機能させることができました。
解決方法がわからない単一のユースケースを除いて、まさに私が望むことを行います。
基本的に、データベースから自動的に入力される選択メニューがあります。この選択メニューには、バックエンドに Ajax 呼び出しを行い、オプションのリストを更新し、データベースを更新して、result
. これは私にとって物事が毛むくじゃらになるところです。
最初の方法は問題なく機能しますが、全体を再インデックスして再適用するviewModel
必要があり、16 ギガの RAM と SSD を搭載したローカル マシンで実行すると、約 2 ~ 3 秒かかります。
jsondata.component.available_tags = result.available_tags;
ko.mapping.fromJS(jsondata, viewModel);
2番目の方法も機能し、ほぼ瞬時にisDirty()
フラグが設定されますが、このデータはすでにデータベースから取得されており、保存する必要がないため、回避したいと考えています。メニューオプションをクリックして update する前に他の何かによって設定されていisDirty.reset()
た場合、それもリセットされるため、メソッドも使用できません。私も避けたいところです。 isDirty
available_tags
viewModel().component.available_tags(result.available_tags);
私の質問は: 最初の方法ではko.mapping.fromJS()
、データセット全体ではなく、特定の要素で UI を強制的に更新できますか? または、2 番目の方法で、更新isDirty
時にフラグ セットを設定しないようにすることはできますか? available_tags
ひねりは、まだオブザーバブルとして保持する必要があるavailable_tags
ため、選択メニューが自動的に生成/更新されることです。
更新:その1つの要素のマッピングを更新できました
ko.mapping.fromJS(result.available_tags, {}, viewModel().component.available_tags);
しかし、それはすぐにisDirty
フラグを立てました...