为什么我的敲除模块在收到 PubNub 消息时会失去绑定?

Why is my knockout module losing it's binding when receiving a PubNub message?

在淘汰赛模块中,我有一个可观察数组,它在视图中使用 foreach 进行迭代:

    <div id="data" data-bind="foreach: dataItems, visible: !loading()">
      <!-- ko compose: {model: $data} --><!-- /ko -->
    </div>

我有一个函数可以这样填充这个可观察数组:

    var dataItems = ko.observableArray();
    var getItems = function(isAMessage){
        dataItems([]);
        dataItems.push(new dataItem('1'));
        dataItems.push(new dataItem('2'));
        dataItems.push(new dataItem('3'));

        if (isAMessage) {
            dataItems.push(new dataItem('4'));
            dataItems.push(new dataItem('5'));
            dataItems.push(new dataItem('6'));
        }
    }

并且在模块的激活函数中,我订阅了一个 pubnub 频道,这样:

    var activate = function () {
        getItems(false);

        var pubnub = PUBNUB.init({
            publish_key: 'pub-...',
            subscribe_key: 'sub-...'
        });

        pubnub.subscribe({
            channel: 'someChannel',
            message: function (m) {
                getItems(true);
            }
        });
    };

问题是当我收到 pubnub 消息时,该函数被调用但可观察数组 dataItems 没有下标,因此视图没有更新。当从激活函数中调用函数 getItems 时,dataItems 有 2 个下标,但是当从 pubnub 消息回调中调用时,它有 none。我不知道我做错了什么!!!

我认为问题是在您的 getItems 方法的第 1 行中您正在重置 observableArray?

dataItems([]);

我不太熟悉 KnockoutJS,但我认为你可以删除这个函数,因为它看起来就像每次调用 getItems 你都在重置数组

我发现了问题,我没有将 pubnub 注入模块。