0

我有一个要在本地更新的 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?如果是这样,我实现上述目标的正确方法是什么?

4

1 回答 1

1

我不确定附加save到一个change事件是一个好主意(我也不确定这不是一个好主意——我想这取决于情况),但在回答你的问题时,你可以检查是否保存前的模型hasChanged您可以在此处的 Backbone 文档中阅读有关此内容的更多信息。

var Goat = Backbone.Model.extend({
  initialize: function() {
    this.on('change', function() {
      if (this.hasChanged()) {
        this.save();
      }
    });
  }
});
于 2013-08-31T17:26:42.047 回答