【发布时间】:2013-05-06 13:23:43
【问题描述】:
我有一个对象addItem 有几个可观察的属性。填充属性后,我将其推送到可观察数组allItems 中,该数组跟踪会话期间创建的所有对象。
问题是当我将addItem 推入allItems 然后对addItem 进行更改时; allItems 也发生了变化。我假设一旦addItem 被推入allItems 两者之间的绑定将不再存在,但似乎推送只是添加了一个引用。
如何在没有引用的情况下将addItem 添加到allItems?
【问题讨论】:
-
你能显示一些代码吗?但一般来说,你必须自己复制你的属性......
-
如果你不想让 allItems 收到通知,因为其中一个项目发生了变化,然后因为它发送更新,你只需要一个简单的数组,而不是可观察的数组,不是吗?
-
@Jalayn,一个 `ko.observableArray' 只会在实际数组更改时通知(即添加、删除或替换项目)。如果项目上的属性发生更改,可观察数组不会跟踪这些更改,因此不会通知数组订阅者。
-
@JosephGabriel 你当然是对的,我不明白保留引用有什么问题......除非他只是想要对象的副本或哈希,如果是这样的话那么你的答案肯定是正确的。
-
不用担心 :) 我可能误解了你的评论。我发现更新可观察数组中对象的对象属性是一个常见的误解,所以我认为它说明的次数越多越好。
标签: javascript knockout.js knockout-2.0