为什么我的敲除模块在收到 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 注入模块。
在淘汰赛模块中,我有一个可观察数组,它在视图中使用 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 注入模块。