0

原始 observable 读取自:

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

3 个“相同”的 observables 被读取到:

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

每个 address* observables 都有自己的视图/表单,通过它可以更新它们。打开视图时,当前地址可观察值设置为self.searchResult.addresses[0]

问题是当更新任何 address* observables 时,原始的self.searchResult.addresses[0]也会更新。

也许是一个愚蠢的问题,但我花了一些时间试图解决它,但没有运气,所以任何输入都将不胜感激!

4

1 回答 1

0

因此,如果我按照您要解释的内容进行操作,您可能会有类似于以下的代码:

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

这在填充视图以编辑 address1 时调用。

因此,当在此视图上编辑 address1 时,self.address1observable 会更新,但也会更新,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 填充为视图填充的地址,该 AddressClass 填充了在其他地方不可观察的值。

希望这可以帮助。但是,如果这个答案不能完全让您到达那里,请告诉我,我很乐意为您提供进一步的帮助,但到那时,小提琴会有所帮助。

于 2012-08-30T14:59:46.517 回答