在淘汰赛模块中,我有一个可观察的数组,使用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消息回调中调用时,它没有。我不知道我做错了什么!!!
答案 0 :(得分:2)
我发现了问题,我没有将pubnub注入模块。
答案 1 :(得分:1)
我认为问题是你的getItems
方法的第1行是否正在重置observableArray?
dataItems([]);
我对KnockoutJS不太熟悉,但我认为您可以删除此功能,因为每次调用时都会显示getItems
您正在重置数组