knockout.js - 淘汰赛 js 将相同的数据两次推送到我的可观察数组中,为什么?
问题描述
这是我的代码,它从套接字调用收集数据,将其转换为 observable 并将其推送到 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())
});
});
我注意到当我将可观察数据推送到数组中时,我得到的原始数据也被推送到数组中,使其成为数组中的两项,我只想要可观察的一项,这是为什么呢?
解决方案
传递给 a 的函数ko.computed
会立即执行,并且只要其依赖项之一发生更改。如果函数有副作用,例如socket.on
回调的附件,这可能是个问题。如果由于某种原因它碰巧运行了两次,你最终会得到两个附加的回调,导致重复的数据进入你的 observable 数组。
我无法完全确定这是否是实际发生的情况,但我的建议是移除ko.computed
包装器并查看问题是否仍然存在。
推荐阅读
- arrays - 用于存储大数据的动态数据结构数组
- excel - 从excel中删除列中已终止值的行
- mongodb - Mongoose - 选择具有对象数组作为搜索参数的文档
- node.js - 如何在nodejs黄瓜硒中使用for循环创建动态xpath
- ansible - 这个变量是可见的吗?
- java - 在 Java 的 3 个文件中找到常用词的有效方法是什么?
- c# - 使用 log4net 记录传入请求的 IP 地址
- node.js - NodeJS 和 TLS,获取客户端证书
- python - 如何读取逗号旁边有双引号的csv文件
- java - Netbeans 9:有没有办法改变新生成方法的位置?