Skip to content

krewenki/backbone.highway

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

backbone.highway

Build Status Coverage Status

A backbone plugin for use with Highway to provide realtime updates to models and collections.

To use, have a Highway server running somewhere, and create a new collection:

Collections

To read all models in a database collection, create a new Highway.Collection and instantiate it.

var ItemModel = Backbone.Highway.Model.extend({});
var ItemsCollection = Backbone.Highway.Collection.extend({
    url: 'url.to.your/database/collection',
    model: ItemModel
})
var Items = new ItemsCollection();

Create

To create a new item in a collection call Collection.create() and provide it an object that contains your attributes. Backbone.Highway will then create a new record in the database and return a corresponding model.

var ItemAttributes = {
  name: 'Dish Soap'
};
var NewItem = Items.create(ItemAttributes);

Update

Models and collections are automatically kept in sync. This means that as soon as you .set() attributes of a model that belongs to a collection, the database will be updated and all other connected clients will see the change.

var Item = Items.at(0);
Item.set({ name: 'Dish Detergent'}); // Everyone will see this instantly

Destroy

To remove a model from the database, call Collection.remove(<Model>). This will remove the model from your collection, as well as from the database and all other clients collections.

var Item = Items.at(0);
Items.remove(Item);

Partial Collection Loading

Sometimes collections on the server are very large and you don't want to force the client to download the whole thing until they need it. Providing constraints in the Collection.minimum object limits the amount of data your initial set will contain.

var ItemModel = Backbone.Highway.Model.extend({});
var ItemsCollection = Backbone.Highway.Collection.extend({
    url: 'url.to.your/database/collection',
    model: ItemModel,
    minimum: {
      limit: 20,
      skip: 10,
      search: {
        name: 'Soap'
      }
    }
})
var Items = new ItemsCollection();

Filtering partial collections

Loading a partial collection allows you to have less content in your users browser, but sometimes you need to filter a collection against the entire dataset. You can do this by using Collection._filter which operates the same as Backbone.Collection.filter with the exception that it returns a promise instead of an array.

function LogicAfterFilter(filteredResult){
  console.log(filteredResult);
}
var ItemModel = Backbone.Highway.Model.extend({});
var ItemsCollection = Backbone.Highway.Collection.extend({
    url: 'url.to.your/database/collection',
    model: ItemModel,
    minimum: {
      limit: 20,
      skip: 10,
      search: {
        name: 'Soap'
      }
    }
});
var Items = new ItemsCollection();
Items._filter(function(item){
  return item.get('type') == 'soap';
}).then(LogicAfterFilter);

Models

var User = new Backbone.Highway.Model.extend({
  default: {
    name: 'Steve'
  }
});

var U = new User();

About

A backbone module to integrate with highway

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published