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:
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();
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);
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
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);
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();
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);
var User = new Backbone.Highway.Model.extend({
default: {
name: 'Steve'
}
});
var U = new User();