Backbone.js 获取更改事件的更改属性

Backbone.js 获取更改事件的更改属性,backbone.js,backbone-events,Backbone.js,Backbone Events,在这个全局更改事件中,是否有一种方法可以检测哪些属性已更改 myModel.on('change', function(model) { // Which attribute changed? }); 我尝试了以下方法: 使用myModel.previousAttributes()但它总是返回最新的值。。。我猜它只会在服务器交互后更新 通过属性迭代并使用myModel.hasChanged(attr),但它总是返回false 有没有办法做到这一点?您可以使用 变更属性模型。变更属性([

在这个全局更改事件中,是否有一种方法可以检测哪些属性已更改

myModel.on('change', function(model) {
  // Which attribute changed?
});
我尝试了以下方法:

  • 使用
    myModel.previousAttributes()
    但它总是返回最新的值。。。我猜它只会在服务器交互后更新
  • 通过属性迭代并使用
    myModel.hasChanged(attr)
    ,但它总是返回false
有没有办法做到这一点?

您可以使用

变更属性模型。变更属性([属性])
仅检索已更改的模型属性的散列,如果 没有。
或者,可以传递外部属性散列 在中,返回该散列中与模型不同的属性。 这可用于确定视图的哪些部分应为 更新,或者需要进行哪些调用才能将更改同步到 服务器

比如说,

var m = new Backbone.Model({
    att1: 'a',
    att2: 'b',
    att3: 'c'
});

m.on('change', function() {
    console.log(m.changedAttributes());
    console.log(_.keys(m.changedAttributes()));
});

m.set({
    att1: 'd',
    att3: 'e'
});

还有一个演示

我可能会迟到。如果您使用的是主干网0.9.9及更高版本,请开始使用.listenTo而不是.on,这样您就不会得到不受垃圾收集影响的对象。