我正在尝试使用在Backbone的模型中使用前面的api提到的示例。我已粘贴下面的示例
var bill = new Backbone.Model({
name: "Bill Smith"
});
bill.bind("change:name", function(model, name) {
alert("Changed name from " + bill.previous("name") + " to " + name);
});
bill.set({name : "Bill Jones"});
警报中的先前值是Bill Smith,这是正确的。但是,如果我尝试通过调用
来访问firebug中的这个bill.previous("name");
比尔琼斯而不是比尔史密斯。为什么会这样?我错过了什么?
答案 0 :(得分:13)
好吧,如果你看一下Backbone的来源,你会看到_previousAttributes
中的Backbone.Model
属性在'change'事件被触发后被重置为当前属性的副本(在change
方法:this._previousAttributes = _.clone(this.attributes);
)。
我想我以前在Github上看到过有关此行为的问题;对很多人来说意外。
编辑:找到它;作者在https://github.com/documentcloud/backbone/pull/373中的引用:
我担心目前的行为是应该如何运作的。以前的属性仅在“更改”事件过程中可用。没有这个,hasChanged()的整个概念毫无意义。
如果您正在寻找更强大的类似撤销功能,我建议您保留以前版本的模型的真实列表。