这是我的代码,它从套接字调用中收集数据,将其转换为observable并将其推送到可观察的数组中。
model.friendHasJoined = ko.computed(function () {
socket.on('friend joined', function(data) {
var mapping = {
'friendsOnline': {
create: function(options) {
return new friendModel(options.data);
}
}
};
model.friendsOnline.push(ko.mapping.fromJS(data, mapping));
// console.log(ray);
console.log(model.friendsOnline())
});
});
我注意到当我将可观察数据推入数组时,我得到的原始数据也被推入数组,使得数组中有两个项目,我只想要可观察数据,为什么会这样?
答案 0 :(得分:0)
传递给ko.computed
的函数会立即执行,并且每当其中一个依赖项发生更改时。如果该函数有副作用,例如socket.on
回调的附件,则可能会出现问题。如果它由于某种原因发生了两次运行,你最终会得到两个附加的回调,导致重复的数据进入你的可观察数组。
我无法确切地知道这是否真的发生了,但我的建议是删除ko.computed
包装,看看问题是否仍然存在。