0

から読み取られる元のオブザーバブル:

self.searchResult = ko.observable(new Class());

次のように読み取られる3つの「同一の」オブザーバブル:

self.address1 = ko.observable(new AddressClass());
self.address2 = ko.observable(new AddressClass());
self.address3 = ko.observable(new AddressClass());

各アドレス*オブザーバブルには、更新される独自のビュー/フォームがあります。ビューを開くと、現在のアドレス監視可能値がself.searchResult.addresses[0]に設定されます。

問題は、アドレス*オブザーバブルのいずれかを更新すると、元のself.searchResult.addresses[0]も更新されることです。

ばかげた質問かもしれませんが、私は運が悪かったのでそれを解決しようとしばらく時間を費やしましたので、どんな入力でもいただければ幸いです!

4

1 に答える 1

0

したがって、あなたが説明しようとしていることに従うと、次のようなコードになる可能性があります。

self.address1(self.searchResult.addresses[0]);

これは、address1 を編集するためにビューに入力するときに呼び出されます。

したがって、このビューで address1 が編集されると、self.address1オブザーバブルが更新されますが、 も更新されます。変更されたものを参照して参照できるように、変更されていないか、または同様のシナリオを参照できるようにしself.searchResult.addresses[0]たいと思います。self.searchResult.addresses[0]

私がこれを正しく理解している場合、あなたがしたいことは次と同等のものです:

var searchResultAddress = self.searchResult.addresses[0];
var address1ToEdit = new AddressClass();
address1ToEdit.addressLine1(searchResultAddressInJS.addressLine1);
address1ToEdit.addressLine2(searchResultAddressInJS.addressLine2);
address1ToEdit.city(searchResultAddressInJS.city);
address1ToEdit.country(searchResultAddressInJS.country);
// etc...
self.address1(address1ToEdit);

が保持するアドレスのプロパティself.searchResult.addresses[0]もオブザーバブルである場合は、最初の行を次のように変更する必要があります。

var searchResultAddress = ko.toJS(self.searchResult.addresses[0]);

重要なのは、ビューに入力されているアドレスに、他の場所では観測できない値が入力された AddressClass を設定することです。

お役に立てれば。ただし、この回答でうまくいかない場合は、お知らせください。さらにお手伝いさせていただきますが、その時点で、フィドルが役立ちます。

于 2012-08-30T14:59:46.517 に答える