Knockout.js knockout js将相同的数据两次推入我的可观察数组,为什么?
这是我的代码,它从套接字调用收集数据,将其转换为可观察的,并将其推送到可观察的数组中Knockout.js knockout js将相同的数据两次推入我的可观察数组,为什么?,knockout.js,Knockout.js,这是我的代码,它从套接字调用收集数据,将其转换为可观察的,并将其推送到可观察的数组中 model.friendHasJoined = ko.computed(function () { socket.on('friend joined', function(data) { var mapping = { 'friendsOnline': { create: function(options) {
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())
});
});
我注意到,当我将可观察数据推入数组时,我得到的原始数据也被推入数组,使其成为数组中的两项,我只想要可观察的一项,这是为什么?一个传递给
ko的函数。computed
会立即执行,并且每当它的一个依赖项发生变化时。如果函数有副作用,例如在回调上附加套接字。这可能是一个问题。如果出于某种原因,它碰巧运行了两次,那么您将得到两个附加的回调,从而导致重复数据进入您的可观察数组
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())
});
});
我不能确切地知道这是否是实际发生的情况,但我的建议是删除ko.computed
包装器,看看问题是否仍然存在。你是说我可以在模型类中直接使用套接字吗?我希望类似于model.socketConnection=socket.on(“friend joined”,model.addFriend)
其中的模型。addFriend
是您已经编写的函数。哇,我不知道这是可能的atol,非常感谢,我今天将尝试它