backbone.js的先前属性不是持久的

时间:2011-08-26 17:25:23

标签: javascript backbone.js

我正在尝试使用在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");
比尔琼斯而不是比尔史密斯。为什么会这样?我错过了什么?

1 个答案:

答案 0 :(得分:13)

好吧,如果你看一下Backbone的来源,你会看到_previousAttributes中的Backbone.Model属性在'change'事件被触发后被重置为当前属性的副本(在change方法:this._previousAttributes = _.clone(this.attributes);)。

我想我以前在Github上看到过有关此行为的问题;对很多人来说意外。

编辑:找到它;作者在https://github.com/documentcloud/backbone/pull/373中的引用:

  

我担心目前的行为是应该如何运作的。以前的属性仅在“更改”事件过程中可用。没有这个,hasChanged()的整个概念毫无意义。

     

如果您正在寻找更强大的类似撤销功能,我建议您保留以前版本的模型的真实列表。