如果可能的话,是否有可能在没有事件的情况下知道是否Backbone.Model.set()
已更改/未更改任何内容?原因是:如果我使用事件,它看起来像:
- 听变化:某事
- 如果价值改变了就做点什么
- model.set("东西", "值")
但是,如果没有发生变化怎么办?我怎么知道?同样对于事件处理程序,我需要适当地删除它们。例如,如果我这样做,如果没有发生更改,我需要删除处理程序
如果可能的话,是否有可能在没有事件的情况下知道是否Backbone.Model.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
当然,您需要为所有不同类型的集合参数添加支持,这只是想法。