我已尝试以下方法为我的模型设置ID:
var globalCounter = 1;
var Model = Backbone.Model.extend({
initialize: function () {
this.id = globalCounter;
globalCounter += 1;
}
});
myModel = new Model();
console.log(myMode.get('id')); // prints undefined
如何为我的模特设置ID?
答案 0 :(得分:10)
您需要使用set()
功能(http://jsbin.com/agosub/1/);
var globalCounter = 1;
var Model = Backbone.Model.extend({
initialize: function () {
this.set('id', globalCounter);
globalCounter += 1;
}
});
myModel = new Model();
console.log(myModel.get('id')); // prints 1
答案 1 :(得分:7)
您必须使用:
this.set('id', globalCounter);
而不是this.id = globalCounter;
您正在将ID值添加到Model对象,但是您想将其添加到 Model.attributes 对象。那是做什么的Model.set()方法。
model.set("key", value)
会将值放在model.attributes.key;
model.get("key")
将返回model.attributes.key
这对于Backbone的新成员来说有点奇怪,但这是一个重要的(也很容易)获得的。它的设计是为了使用model.set(...)
来触发更改事件,您可以轻松捕获以更新您的视图。
Backbone属性对象已被ES6 getter和setter过时。这些功能可以覆盖标准访问。
警告:这是伪代码,可能与ES6一起使用一天!
class MyModel extends Backbone.Model{
get id(){ return this.attributes.id; }
set id(id){ this.attributes.id = id; }
}
这将允许写:
let myModel = new Model();
myModel.id = 13; // will use myModel.id(13)
console.log (myModel.id); // will show myModel.id()
截至今天,这只是一个Backbone 2的梦想。在基本搜索之后,我什么都没看到。