No paradigma MVC, os models referem-se ao modelo, aos dados, as regras de negócio… no Backbone não é diferente.

Podemos definir um model como se fosse uma classe (posteriormente será instanciada) dessa forma:

var Person = Backbone.Model.extend({ });

Ao definir a classe, poderemos utilizar todos os métodos disponíveis no Backbone, por exemplo o método initialize().

Person = Backbone.Model.extend({
	initialize: function(){
    	console.log("model inicializado");
  	}
});

Ao instanciarmos a classe, vemos o log da mensagem.

var person = new Person({ name: "Thomas", age: 67});
// "model inicializado"

Método set()

Podemos passar um objeto com os valores ao construtor, veja o exemplo seguinte.

var person = new Person({ name: "Thomas", age: 67});
console.log(person.attributes)
// Object { name: "Thomas", age: 67 }

Poderíamos também utilizar o método set() passando o objeto com os dados ao método.

var person = new Person();
person.set({ name: "Thomas", age: 67});
console.log(person.attributes)
// Object { name: "Thomas", age: 67 }

Ou ainda, podemos utilizar o método set() separadamente para cada propriedade.

var person = new Person();
person.set('name', 'Thomas');
person.set('age', 67);
console.log(person.attributes)
// Object { name: "Thomas", age: 67 }

Método get()

O método get() acessa o valor da propriedade, conforme nosso exemplo, temos…

console.log(person.get('name'));
console.log(person.get('age'));
// "Thomas"
// 67

Outro exemplo

No exemplo abaixo estamos incluindo o método log() apenas para ilustrar que podemos incluir métodos definidos pelo desenvolvedor.

var Song = Backbone.Model.extend({
    name: '',
    compositor: '',
    log: function () {
        console.log('música: ' + this.get('name') + ', compositor: ' + this.get('compositor'))
    }
});
var music01 = new Song({
    name: 'Águas de março',
    compositor: 'Tom Jobim'
});
var music02 = new Song({
    name: 'Garota de Ipanema',
    compositor: 'Tom Jobim e Vinícius de Moraes'
})
var music03 = new Song({
    name: 'Aquarela',
    compositor: 'Toquinho'
})

Para vermos os resultados acrescentamos…

console.log(music01.toJSON());
console.log(music02.toJSON());
console.log(music03.toJSON());
// Object { name: "Águas de março", compositor: "Tom Jobim" }
// Object { name: "Garota de Ipanema", compositor: "Tom Jobim e Vinícius de Moraes" }
// Object { name: "Aquarela", compositor: "Toquinho" }

Repare que método toJSON() não retorna uma string JSON e sim um objeto para ser convertido em JSON.

Pensando nisso, devemos utilizar o método JSON.stringfy() para obtermos strings JSON, veja abaixo.

console.log(JSON.stringify(music01.toJSON()));
console.log(JSON.stringify(music02.toJSON()));
console.log(JSON.stringify(music03.toJSON()));
// "{"name":"Águas de março","compositor":"Tom Jobim"}"
// "{"name":"Garota de Ipanema","compositor":"Tom Jobim e Vinícius de Moraes"}"
// "{"name":"Aquarela","compositor":"Toquinho"}"

Por outro lado, podemos simplificar o código acima conforme demonstrado a seguir.

console.log(JSON.stringify(music01));
console.log(JSON.stringify(music02));
console.log(JSON.stringify(music03));
// "{"name":"Águas de março","compositor":"Tom Jobim"}"
// "{"name":"Garota de Ipanema","compositor":"Tom Jobim e Vinícius de Moraes"}"
// "{"name":"Aquarela","compositor":"Toquinho"}"