从Subscribe函数中的observableArray中删除元素,而不再发送信号

时间:2011-10-04 15:37:46

标签: javascript knockout.js

我要做的是以下内容:

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。

我希望你能理解我的(不太好......)英语。

谢谢你的时间!

1 个答案:

答案 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));