我要做的是以下内容:
var queueManagerClass = function() {
this.queue = ko.observableArray();
this.queue.subscribe( function(theChangedQueue) {
// Do some nice things..
// Nice things are over, remove the last item from the queue..
this.queue.remove(theChangedQueue.pop());
}.bind(this));
};
除了2个问题发生:当我调用this.queue.remove(item)时;我最终将进入一个无限循环..订阅函数会一遍又一遍地调用它。
我知道有一个选项可以暂时“取消绑定”订阅功能,但我不能冒这样一个事实,即我错过了一个在解除绑定和绑定的平均时间内插入的queueItem。
我希望你能理解我的(不太好......)英语。
谢谢你的时间!
答案 0 :(得分:2)
解决此问题的一种方法是使您可以检测到您正在删除项目,并在发生这种情况时特别忽略该事件。这可以通过使用local来存储“isRemoving”状态来完成。例如
var isRemoving = false;
this.queue.subscribe( function(theChangedQueue) {
if (isRemoving) {
return;
}
// Do some nice things..
// Nice things are over, remove the last item from the queue..
isRemoving = true;
this.queue.remove(theChangedQueue.pop());
isRemoving = false;
}.bind(this));