每个骨干模型具有hasChanged
method:
hasChangedmodel.hasChanged([attribute])
自上次"change"
事件具有典型的改变?如果属性已通过,则返回true
,如果该特定属性已更改。
也许你可以用它来检查你的第三种可能性。
顺便说一句,回调不是异步的。错误和更改的回调触发并set
returns之前返回:
set : function(attrs, options) {
//...
// Run validation.
if (!options.silent && this.validate && !this._performValidation(attrs, options)) return false;
//...
// Update attributes.
for (var attr in attrs) {
var val = attrs[attr];
if (!_.isEqual(now[attr], val)) {
now[attr] = val;
delete escaped[attr];
this._changed = true;
if (!options.silent) this.trigger('change:' + attr, this, val, options);
}
}
的_performValidation
呼叫触发错误回调时,this.trigger
通话将调用每个属性的回调。
谢谢!我的印象是异步的。 我会尝试使用hasChanged ... –
@Che:任何碰到服务器的东西('sync','save',...)将是异步的,只有在浏览器中发生的任何事情都是同步的和顺序的。 –
看看上面的代码。 hasChanged()查找'this._changed',如果不将模型设置为新值,它将不会被触及。所以这是行不通的。 – maxl0rd