backbone.highway

Cruise the highway with backbone!

Stats

StarsIssuesVersionUpdatedCreatedSize
backbone.highway
001.2.125 years ago6 years agoMinified + gzip package size for backbone.highway in KB

Readme

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();

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.