为什么我的淘汰赛模块在收到PubNub消息时失去了它的绑定?

时间:2015-06-25 23:30:27

标签: javascript knockout.js pubnub

在淘汰赛模块中,我有一个可观察的数组,使用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没有下标,因此,视图不会更新。当从activate函数调用函数getItems时,dataItems有2个下标,但是当它从pubnub消息回调中调用时,它没有。我不知道我做错了什么!!!

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

dataItems([]);

我对KnockoutJS不太熟悉,但我认为您可以删除此功能,因为每次调用时都会显示getItems您正在重置数组