7

在此全局更改事件中,有没有办法可以检测到哪个属性已更改?

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

我尝试了以下方法:

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

有没有办法做到这一点?

4

1 回答 1

12

您可以使用model.changedAttributes

changedAttributes model.changedAttributes([attributes])
仅检索已更改的模型属性的哈希,如果没有,则返回 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'
});

还有一个演示http://jsfiddle.net/nikoshr/NYnqM/

于 2013-05-24T13:07:01.910 回答