知道Backbone.Model.set是否更改/未更改任何内容

时间:2013-07-10 02:18:12

标签: events backbone.js model

如果可能的话,是否可以知道Backbone.Model.set()是否已更改/未更改任何事件?原因是:如果我使用事件,它将看起来像:

  • 倾听改变:某事
    • 如果价值发生了变化,就会采取行动
  • model.set(“something”,“value”)

但如果改变不会发生怎么办?我怎么知道的?还有事件处理程序,我需要批准删除它们。例如,如果我这样做,我需要删除处理程序,如果没有发生更改

1 个答案:

答案 0 :(得分:1)

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

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

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

当然,你需要为所有不同类型的set参数添加支持,这只是Idea。