Backbone:我没有被设置为模型

时间:2012-09-24 22:20:50

标签: javascript backbone.js

我已尝试以下方法为我的模型设置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?

2 个答案:

答案 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更新:

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的梦想。在基本搜索之后,我什么都没看到。