S
All posts

BACKBONE – MODELS

  • development
  • javascript
  • backbone.js

Generating a model class:

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

Generating a model instance:

var todoItem = new TodoItem({
  description: 'Pick up milk',
  status: 'incomplete',
});

To get an attribute:

todoItem.get('description');

To set an attribute:

todoItem.set({ status: 'complete' });

Fetching Data from the Server

Let's create a Backbone model to fetch data from the server:

var todoItem = new TodoItem();

URL to get JSON data for model:

todoItem.url = '/todo';

To populate model from server:

todoItem.fetch();

Result:

{ "id": 1, "description": "Pick up milk", "status": "incomplete" }
todoItem.get('description');

Result:

'Pick up milk'

Now let's call the RESTful web service:

var TodoItem = Backbone.Model.extend({ urlRoot: '/todos' });

Fetch todo with id = 1

var todoItem = new TodoItem({ id: 1 });
todoItem.fetch();

fetch will call GET /todos/1

Result:

{ "id": 1, "description": "Pick up milk", "status": "incomplete" }

To update the todo:

todoItem.set({ description: 'Pick up cookies.' });
todoItem.save();

This is calling PUT /todos/1 with JSON params.

Creating & Destroying a New Todo

var todoItem = new TodoItem();
todoItem.set({ description: 'Fill prescription.' });

todoItem.save(); // POST /todos with JSON params

todoItem.get('id'); // 2

todoItem.destroy();

Get JSON from model

To get JSOn from the model:

todoItem.toJSON();

Result:

{ "id": 2, "description": "Fill prescription", "status": "incomplete" }

Default Values

Let's see how we can set default values in Backbone.

js
    var TodoItem = Backbone.Model.extend({
        defaults: {
            description: 'Empty todo...',
            status: 'incomplete'
        }
    });

    var todoItem = new TodoItem();
    todoItem.get('description'); // 'Empty todo...'
    todoItem.get('status'); //'incomplete'

Models Can Have Events

To listen for an event on a model:

todoItem.on('event-name', function () {
  alert('event-name happened!');
});

Run the event:

todoItem.trigger('event-name');

Special Events

Here are some special events of Backbone:

To listen for changes:

todoItem.on('change', doThing);

Event triggered on change:
```js
var doThing = function() {
    ...
}

Set without triggering event:

todoItem.set({ description: 'Fill prescription.' }, { silent: true });

Remove event listener

todoItem.off('change', doThing);
todoItem.on(<event>, <method>);

Built-in events:

  • change When an attribute is modified
  • change:<attr> When <attr> is modified
  • destroy When an attribute is modified
  • sync When a model is destroyed
  • error When model save or validation fails
  • all Any triggered event