Randomblue
Randomblue

Reputation: 116443

Backbone: Id not being set to model

I have tried the following to set an id to my model:

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

How can I set an id to my models?

Upvotes: 6

Views: 6797

Answers (2)

Nicolas Zozol
Nicolas Zozol

Reputation: 7048

You must use :

this.set('id', globalCounter);

instead of this.id = globalCounter;

You are adding the id value to the Model object, but you want to add it to Model.attributes object. And that what is doing Model.set() method.

model.set("key", value) will put the value in model.attributes.key;

model.get("key") will return the value inside model.attributes.key

This is a little weird for new comers to Backbone, but it's a major (and easy) point to get. It's designed so that using model.set(...) will fire change events you can easily catch to update your views.

Backbone and ES6 Update :

The Backbone attribute object is outdates by ES6 getters and setters. Theses functions can overwrite the standard access.

Warning : this is pseudo-code that may be one day used with ES6 !

class MyModel extends Backbone.Model{

    get id(){ return this.attributes.id; }
    set id(id){ this.attributes.id = id; }

}

This would allow to write :

let myModel = new Model();
myModel.id = 13; // will use myModel.id(13)
console.log (myModel.id); // will show myModel.id()

As of today, this is only a dream of a Backbone 2. After basic searches, I've seen nothing about that coming.

Upvotes: 7

Matt
Matt

Reputation: 75327

You need to use the set() function instead (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

Upvotes: 10

Related Questions