我有一个具有多个可观察属性的对象addItem
。填充属性后,我将其推送到一个可观察的数组allItems
,该数组跟踪会话期间创建的所有对象。
问题是当我将addItem
推入allItems
然后对addItem
进行更改时; allItems
也发生了变化。我假设一旦addItem
被推入allItems
,两者之间的绑定将不复存在,但它似乎只是添加了一个引用。
如何在没有参考的情况下将addItem
添加到allItems
?
答案 0 :(得分:3)
默认情况下,ko.observable
项在添加到数组后仍然可以观察到。如果要删除可观察性,则需要创建一个具有不可观察属性的对象。
一种方法是使用ko.utils.unwrapObservable(obj.prop)
手动复制属性。
更“自动”的方法是使用ko.toJS()
- 这会将具有可观察属性的对象转换为普通的JS对象。
self.allItems.push(ko.toJS(self.item2));
或者如果您想为数组中的项目单独维护可观察性,可以使用ko.mapping.fromJS
读取它:
allItems.push(ko.mapping.fromJS(ko.toJS(self.item2)));