監視可能なプロパティが別のビューモデルによって変更されたときにルックアップ関数を起動する方法を知りたくて、この質問を書き始めましたが、現在、この問題にどのように取り組んでいるのか疑問に思っています。いずれにせよ、ここに私のシナリオがあります:
アイテムのグリッドがあるページがあります。ユーザーがボタンをクリックしてアイテムを編集すると、元のデータすべてと、メイン グリッド オブジェクトにないそのレコードに関する詳細データを含む編集ポップアップ ウィンドウが表示されます。
編集ウィンドウには、データの「作業コピー」用の別の観察対象があります。ユーザーが保存ボタンをクリックして変更をコミットすると、それを元のオブジェクトにコピーして、変更がグリッドに反映されるようにする予定です。
現在、ko.postbox ライブラリを使用して 2 つのビューモデル間の通信を行っています。どちらにも、「syncWith」を使用して選択および同期されたアイテムを格納するためのオブザーバブルが含まれています。
これがどのように見えるかのアイデアです:
function MainVM()
{
self = this;
this.Item = ko.observable().syncWith("GridItem");
this.Edit = function (item)
{
self.Item(item);
}
}
function EditVM()
{
self = this;
this.SelectedItem = ko.observable().syncWith("GridItem");
this.WorkingItem = ko.observable();
this.RetrieveGridItemDetails = function (id)
{
// Ajax lookup to populate WorkingItem
}
}
ユーザーがクリックしてアイテムを編集すると...選択したアイテムを編集ウィンドウ vm (既に syncWith で発生) に公開したいのですが、AJAX ルックアップを実行して、そのアイテムに関する残りの情報を取得します (これを行う方法のアイデアが不足しています)。
その特定のオブザーバブルを手動でサブスクライブすることと、編集ウィンドウのビューモデル内で計算されたオブザーバブルを使用して別のルックアップ関数を呼び出せるようにすることを検討しましたが、これまでのところ、実用的な解決策を見つけることができませんでした: (
私は現在の考え方で間違った道を進んでいますか、それともそのルックアップを実行する方法を誰かが知っていますか?