Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events 了解Backbone.Model.set是否更改/未更改任何内容_Events_Backbone.js_Model - Fatal编程技术网

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实现相反)