骨干为什么要保存更改?

时间:2013-08-31 01:21:20

标签: javascript backbone.js

我有一个Backbone模型,我想在本地更新,但我不知道更新是否会改变模型中的任何内容。

我不想在模型上运行set并立即调用save,因为没有任何更改。

理想情况下,我只是听一个change事件,然后保存它:

var Goat = Backbone.Model.extend({

  initialize: function() {
    this.on('change', function(){
      this.save();
    });
  }

});

var billy = new Goat({
  gruff: true
});

billy.set('gruff', true); // doesn't do anything
billy.set('gruff', false); // fires change

问题在于,调用save然后显然会触发change,所以我们进入激动人心的无尽圈子。

为什么save会触发change?如果是这样,那么我实现上述目标的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

我不确定将save附加到change事件是一个好主意(我不确定不是一个好主意 - 我想这取决于具体情况),但在回答您的问题时,您可以在保存之前检查模型hasChanged。您可以在Backbone文档here中了解更多相关信息。

var Goat = Backbone.Model.extend({
  initialize: function() {
    this.on('change', function() {
      if (this.hasChanged()) {
        this.save();
      }
    });
  }
});