0

如果可能的话,是否有可能在没有事件的情况下知道是否Backbone.Model.set()已更改/未更改任何内容?原因是:如果我使用事件,它看起来像:

  • 听变化:某事
    • 如果价值改变了就做点什么
  • model.set("东西", "值")

但是,如果没有发生变化怎么办?我怎么知道?同样对于事件处理程序,我需要适当地删除它们。例如,如果我这样做,如果没有发生更改,我需要删除处理程序

4

1 回答 1

1

这是一个简单的解决方案,将事件隐藏到一个简单的同步函数中,如果设置有效果则返回。

我选择以不同的函数名称来实现它,但您也可以覆盖默认设置行为。

var M = Backbone.Model.extend({
  setThatLetsYouKnow: function(key, value){
    var thisSetHasEffect = { flag: false};
    this.listenToOnce(this, "change", function(){ 
      thisSetHasEffect.flag = true;  
    });
    this.set(key, value);
    return thisSetHasEffect.flag;
  }
});

结果是:

var m = new M();
m.setThatLetsYouKnow("key",2)// return true
m.setThatLetsYouKnow("key",2)// reutrn fasle

当然,您需要为所有不同类型的集合参数添加支持,这只是想法。

于 2013-07-10T08:18:53.770 回答