2013-08-31 29 views
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 

的问题,这是调用保存那么显然激发change,等我们走在令人心动不已圈。

为什么会save触发change?如果是这样,那么我有什么正确的方法来达到上述目的呢?

+0

明确你的目标:只要模型属性发生变化,你想坚持模型? –

+0

是的。无需事先检查模型是否有所不同,而无需创建“更改” - “保存”循环。 – dthree

+0

好吧,仅供参考:模型会在每次set()或save()时检查当前模型是否不同。 http://backbonejs.org/docs/backbone.html#section-46 –

回答

1

我不知道该附加savechange事件是一个好主意(我不知道它不是一个好主意,要么 - 我想这要看情况而定),但在回答到你的问题,你可以检查型号hasChanged保存前。您可以在Backbone文档here中阅读更多。

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