0

我有一个addItem具有几个可观察属性的对象。填充属性后,我将其推送到一个可观察的数组allItems中,该数组跟踪会话期间创建的所有对象。

问题是当我将一个推addItemallItems然后对addItem;进行更改时 allItems也发生变化。我认为一旦addItem被推入allItems两者之间的绑定将不再存在,但似乎推只是添加了一个引用。

如何addItemallItems没有参考的情况下添加?

4

1 回答 1

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)));

见小提琴

于 2013-05-06T13:53:59.103 回答