我有一个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)));