Events 了解Backbone.Model.set是否更改/未更改任何内容
如果可能的话,是否可以知道Events 了解Backbone.Model.set是否更改/未更改任何内容,events,backbone.js,model,Events,Backbone.js,Model,如果可能的话,是否可以知道Backbone.Model.set()是否在没有事件的情况下更改了/没有更改任何内容?原因是:如果我使用事件,它将如下所示: 倾听变化:一些东西 如果值已更改,请执行某些操作 model.set(“某物”、“值”) 但如果变化没有发生呢?我怎么知道?同样对于事件处理程序,我需要适当地删除它们。例如,如果我这样做的话,如果没有发生更改,我需要删除处理程序。这里有一个简单的解决方案,它将事件隐藏到一个简单的同步函数中,该函数在set生效时返回 我选择在不同的函数名
Backbone.Model.set()
是否在没有事件的情况下更改了/没有更改任何内容?原因是:如果我使用事件,它将如下所示:
- 倾听变化:一些东西
- 如果值已更改,请执行某些操作
- model.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
当然,您需要为所有不同类型的集合参数添加支持,这正是我们的想法 如果更改没有发生,事件将不会触发…我将坚持使用事件,主干是一个事件驱动的库…如果您想要更好的解决方案,请给出您的用例answer@JiewMeng-顺便说一句,此实现基于当前在集合的同一同步流中发生的集合侦听器的Backbone.js实现(与setTimeout实现相反)