backbone-serialize v1.1.0
backbone-serialize 
Serialize Backbone models and collections into JSON representations
This was written to prevent mutating model/collection state once inside of a template. This was heavily inspired by Chaplin's serialize method.
Getting Started
npm
Install the module with: npm install backbone-serialize
// Add our bindings to Backbone
var BackboneSerialize = require('backbone-serialize');
var Backbone = BackboneSerialize.mixin(require('backbone'));
// Create a model and serialize it
var model = new Backbone.Model({
hello: 'world'
});
model.serialize(); // {hello: 'world'}
// Create a model with a model and serialize it
var model = new Backbone.Model({
name: 'Earth',
galaxy: new Backbone.Model({
name: 'Milky Way'
})
});
model.serialize(); // {name: 'Earth', galaxy: {name: 'Milky Way'}}
// Create a model with dynamic attributes
var PersonModel = Backbone.Model.extend({
dynamicAttributes: ['full_name'],
full_name: function () {
return this.get('first_name') + ' ' + this.get('last_name');
}
});
var person = new PersonModel({
first_name: 'Bark',
last_name: 'Ruffalo'
});
person.serialize(); // {first_name: 'Bark', full_name: 'Bark Ruffalo', last_name: 'Ruffalo'}
// Create a collection and serialize it
var collection = new Backbone.Collection([
new Backbone.Model({
word: 'hello'
}),
new Backbone.Model({
word: 'world'
})
]);
collection.serialize(); // [{word: 'hello'}, {word: 'world'}]bower
Install the module with: bower install backbone-serialize
<script src="bower_components/backbone-serialize/dist/backbone-serialize.min.js"></script>
<script>
window.BackboneSerialize; // Use same as in `npm`
</script>Vanilla
Download the minified JS at:
<script src="backbone-serialize.min.js"></script>
<script>
window.BackboneSerialize; // Use same as in `npm`
</script>Documentation
backbone-serialize exposes the function mixin via exports.mixin.
mixin(Backbone)
Add serialize bindings to Backbone library
This function mutates Backbone.Model.prototype and Backbone.Collection.prototype and adds a serialize method to each.
- Backbone
Object- Backbone library to mix into- Model
Function- Constructor for Backbone models - Collection
Function- Constructor for Backbone collections
- Model
Returns:
- Backbone
Object- OriginalBackbonelibrary passed in with mutatedBackbone.ModelandBackbone.Collection
model.dynamicAttributes
Array of attributes that should be added to the returned serialized values. It is preferred to define this via Model.extend but it can be defined directly on instances.
- dynamicAttributes
String[]- Array of strings for methods to run and save as serialized attributes- For example, if
dynamicAttributesis['formatted_date'], thenmodel.formatted_date()would be run and saved to the serialized result
- For example, if
Usage via Model.extend:
var UserModel = Backbone.Model.extend({
dynamicAttributes: ['formatted_date'],
formatted_date: function () {
// `last_login_date` is a Date, we are formatting it to a human friendlier string
// e.g. 'Wed Feb 25 2015'
return this.get('last_login_date').toDateString();
}
});
var user = new UserModel({
username: 'barkruffalo'
});
user.serialize(); /*
{
formatted_date: 'Wed Feb 25 2015',
username: 'barkruffalo'
}
*/model.serialize()
Return JSON form of model.attributes. This iterates over model.attributes, serializes any models/collections, and saves all attributes into an object.
Additionally, it supports model.dynamicAttributes which allows for converting methods into their serialized form.
Returns:
- retObj
Object- Serialized form ofmodel.attributes- This will be key/value pairs that directly correspond to
model.attributes - If any of the attributes were a model or collection, then this will be their
.serialize()'dform - If
model.dynamicAttributeswas defined, then those properties will be executed and be preset onretObjunder their respective keys
- This will be key/value pairs that directly correspond to
collection.serialize()
Returns JSON form of collection.models. This iterates over collection.models, serializes any models, and saves all results into an array of objects.
Returns:
- retArr
Object[]- Array of serialized form ofcollection.models- This will be in the same order as
collection.models - If any of the models were a model, then this will be their
.serialize()'dform
- This will be in the same order as
Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint via npm run lint and test via npm test.
License
Copyright (c) 2015 Underdog.io
Licensed under the MIT license.