6

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

4

2 回答 2

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
于 2012-09-24T22:26:31.537 回答
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(...)将触发更改事件,您可以轻松捕获以更新您的视图。

骨干网和 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 的梦想。经过基本搜索,我没有看到任何关于它的到来。

于 2012-09-24T22:52:13.837 回答