Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

backbone-nesty

bevry29MIT2.0.0

Support nested data types like collections and models within your Backbone.js models

backbone, backbone.js, model, models, nested model, collection, collections, nested collections, nested, deep, getsetdeep, getdeep, setdeep, nested attributes

readme

Backbone Nesty

Travis CI Build Status NPM version NPM downloads Dependency Status Dev Dependency Status
Patreon donate button Open Collective donate button Gratipay donate button Flattr donate button PayPal donate button Bitcoin donate button Wishlist browse button
Slack community badge

Support nested data types like collections and models within your Backbone.js models

Install

NPM

  • Install: npm install --save backbone-nesty
  • Module: require('backbone-nesty')

Browserify

  • Install: npm install --save backbone-nesty
  • Module: require('backbone-nesty')
  • CDN URL: //wzrd.in/bundle/backbone-nesty@2.0.0

Ender

  • Install: ender add backbone-nesty
  • Module: require('backbone-nesty')

Editions

This package is published with the following editions:

  • backbone-nesty aliases backbone-nesty/index.js which uses Editions to automatically select the correct edition for the consumers environment
  • backbone-nesty/source/index.coffee is Source + CoffeeScript + Require
  • backbone-nesty/esnext/index.js is CoffeeScript Compiled + ESNext + Require
  • backbone-nesty/es2015/index.js is CoffeeScript Compiled + ES2015 + Require

Older environments may need Babel's Polyfill or something similar.

Usage

Example

// 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

BackboneNestyModel API

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 attribute
    • models defaults to {}, an object which keys are the attributes and values are the model data type for the attribute
    • embed 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 calling toJSON on the model or just an id listing
    • strict defaults to true, 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 instead
    • get(key) adds support for nested gets
    • set(attrs,opts) adds support for nested sets and will instantiate the value according to the nested data type if applicable

History

Discover the release history by heading on over to the HISTORY.md file.

Contribute

Discover how you can contribute by heading on over to the CONTRIBUTING.md file.

Backers

Maintainers

These amazing people are maintaining this project:

Sponsors

These amazing people have contributed finances to this project:

Become a sponsor!

Patreon donate button Open Collective donate button Gratipay donate button Flattr donate button PayPal donate button Bitcoin donate button Wishlist browse button

Contributors

These amazing people have contributed code to this project:

Discover how you can contribute by heading on over to the CONTRIBUTING.md file.

License

Unless stated otherwise all works are:

and licensed under:

changelog

History

v2.0.0 2018 January 26

  • parse() now forwards the parse option
  • Now compatible with any Backbone v1 version
  • Upgraded compilation from CoffeeScript v1 with CoffeeScript v2
  • Now published with multiple editions so you can select the best one for your environment
  • Updated base files

v1.6.0 2013 April 19

  • Setting a nested ID collections over a pre-set value will now apply properly

v1.5.0 2013 April 19

  • Correctly handle setting ID indexed collections
  • Added tests for embeds property

v1.4.0 2013 April 18

  • By default when over-writing a model attribute with a new model, we will replace the old model with the new model, rather than copying in the attributes of the new model into the old model
    • This can be turned off by using replaceModel: false inside your set options
  • Added isPreparedValue(key,value) method

v1.3.0 2013 April 17

  • Can now set strict property by passing it as an option to the constructor
  • We now dereference the defaults as well as the toJSON output
  • toJSON output will now also have the model's id

v1.2.0 2013 April 17

  • We now dereference the defaults property
  • Methods are now bound to the instance

v1.1.0 2013 April 16

  • If the nested object already exists, we won't over-write it but instead apply the new values to it

v1.0.1 2013 April 10

  • toJSON() will now use get on the model instead of our internal getDeep on attributes for fetching nested models then serialising them
  • get will now set the value if it needed to be prepared

v1.0.0 2013 April 10

  • Initial working release

v0.1.0 2013 April 8

  • Initial non-working version