更改事件的更改属性

时间:2013-05-24 12:57:01

标签: backbone.js backbone-events

在这个全局变更事件中,有没有办法可以检测哪个属性发生了变化?

myModel.on('change', function(model) {
  // Which attribute changed?
});

我尝试了以下内容:

  • 使用myModel.previousAttributes()但它总是返回最新值...我猜它只会在服务器交互后更新。
  • 迭代低谷属性并使用myModel.hasChanged(attr),但它总是返回false。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:12)

您可以使用model.changedAttributes

  

changedAttributes model.changedAttributes([attributes])
  仅检索已更改的模型属性的哈希,如果是,则检索为false   没有。
  可选地,可以传递外部属性哈希   in,返回该哈希中与模型不同的属性。   这可以用来确定视图的哪些部分应该是   更新,或需要进行哪些调用以将更改同步到   服务器

例如,

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'
});

演示http://jsfiddle.net/nikoshr/NYnqM/