Support nested data types like collections and models within your Backbone.js models
- Install:
npm install --save backbone-nesty
- Module:
require('backbone-nesty')
- Install:
npm install --save backbone-nesty
- Module:
require('backbone-nesty')
- CDN URL:
//wzrd.in/bundle/[email protected]
- Install:
ender add backbone-nesty
- Module:
require('backbone-nesty')
This package is published with the following editions:
backbone-nesty
aliasesbackbone-nesty/index.js
which uses Editions to automatically select the correct edition for the consumers environmentbackbone-nesty/source/index.coffee
is Source + CoffeeScript + Requirebackbone-nesty/esnext/index.js
is CoffeeScript Compiled + ESNext + Requirebackbone-nesty/es2015/index.js
is CoffeeScript Compiled + ES2015 + Require
Older environments may need Babel's Polyfill or something similar.
// Import
var Backbone = require('backbone');
var BackboneNestyModel = require('backbone-nesty').BackboneNestyModel;
// Eye Model
var EyeModel = Backbone.Model.extend({
attributes: {
color: null,
open: false
}
});
// Eye Collection
var EyeCollection = Backbone.Collection.extend({
model: EyeModel
});
// Mouth Model
var MouthModel = Backbone.Model.extend({
attributes: {
open: false
}
});
// Head Model
var HeadModel = BackboneNestyModel.extend({
// Define our nested collections
collections: {
eyes: EyeCollection
},
// Define our nested models
models: {
mouth: MouthModel
}
});
// Instantiate our head with our nested data
var myHead = new HeadModel({
// will create a mouth model with this data
mouth: {
open: true
},
// will create an eyes collection with this data
eyes: [
// will create an eye model with this data
{
id: 'left',
color: 'green',
open: true
},
// will create an eye model with this data
{
id: 'right',
color: 'green',
open: true
}
]
});
// Check
console.log(myHead.toJSON());
console.log(myHead.get('eyes.left.open')); // true
// ^ equiv to myHeader.get('eyes').get('left').get('open')
// Nested Setter
myHead.set('eyes.left.open', false);
// ^ equiv to myHeader.get('eyes').get('right').set('open', false)
// Check
console.log(myHead.toJSON());
console.log(myHead.get('eyes.left.open')); // false
require('backbone-nesty').BackboneNestyModel
is an extended Backbone.js Model that adds the following functionality:
- properties
collections
defaults to{}
, an object which keys are the attributes and values are the collection data type for the attributemodels
defaults to{}
, an object which keys are the attributes and values are the model data type for the attributeembed
defaults to{}
, an object which keys are the attributes and values are boolean on whether or not we should embed the full data of this attribute when callingtoJSON
on the model or just an id listingstrict
defaults totrue
, a boolean for whether or not we should allow unknown attributes to be set on our model
- methods
toJSON()
will serialize the model and all nested data types as well, if the embed property for an nested data type is false, that value will be replaced with an id listing insteadget(key)
adds support for nested getsset(attrs,opts)
adds support for nested sets and will instantiate the value according to the nested data type if applicable
Discover the release history by heading on over to the HISTORY.md
file.
Discover how you can contribute by heading on over to the CONTRIBUTING.md
file.
These amazing people are maintaining this project:
These amazing people have contributed finances to this project:
Become a sponsor!
These amazing people have contributed code to this project:
Discover how you can contribute by heading on over to the CONTRIBUTING.md
file.
Unless stated otherwise all works are:
- Copyright © Bevry Pty Ltd
and licensed under: