Backbone:我没有被设置为模型

Ran*_*lue 6 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
Run Code Online (Sandbox Code Playgroud)

如何为我的模型设置ID?

Mat*_*att 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
Run Code Online (Sandbox Code Playgroud)


Nic*_*zol 7

你必须使用:

this.set('id', globalCounter);
Run Code Online (Sandbox Code Playgroud)

代替 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(...)fire fire change事件,您可以轻松捕获以更新您的视图.

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; }

}
Run Code Online (Sandbox Code Playgroud)

这将允许写:

let myModel = new Model();
myModel.id = 13; // will use myModel.id(13)
console.log (myModel.id); // will show myModel.id()
Run Code Online (Sandbox Code Playgroud)

截至今天,这只是一个Backbone 2的梦想.经过基本的搜索,我什么都没看到.