knockout js将相同的数据两次推送到我的可观察数组中,为什么?

时间:2018-06-08 21:04:56

标签: knockout.js

这是我的代码,它从套接字调用中收集数据,将其转换为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())

    });

});

我注意到当我将可观察数据推入数组时,我得到的原始数据也被推入数组,使得数组中有两个项目,我只想要可观察数据,为什么会这样?

1 个答案:

答案 0 :(得分:0)

传递给ko.computed的函数会立即执行,并且每当其中一个依赖项发生更改时。如果该函数有副作用,例如socket.on回调的附件,则可能会出现问题。如果它由于某种原因发生了两次运行,你最终会得到两个附加的回调,导致重复的数据进入你的可观察数组。

我无法确切地知道这是否真的发生了,但我的建议是删除ko.computed包装,看看问题是否仍然存在。