我有一个addItem
具有几个可观察属性的对象。填充属性后,我将其推送到一个可观察的数组allItems
中,该数组跟踪会话期间创建的所有对象。
问题是当我将一个推addItem
入allItems
然后对addItem
;进行更改时 allItems
也发生变化。我认为一旦addItem
被推入allItems
两者之间的绑定将不再存在,但似乎推只是添加了一个引用。
如何addItem
在allItems
没有参考的情况下添加?
我有一个addItem
具有几个可观察属性的对象。填充属性后,我将其推送到一个可观察的数组allItems
中,该数组跟踪会话期间创建的所有对象。
问题是当我将一个推addItem
入allItems
然后对addItem
;进行更改时 allItems
也发生变化。我认为一旦addItem
被推入allItems
两者之间的绑定将不再存在,但似乎推只是添加了一个引用。
如何addItem
在allItems
没有参考的情况下添加?
默认情况下,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)));