1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
backbone-deep-model
===================
Improved support for models with nested attributes.
Allows you to get and set nested attributes with path syntax, e.g. `user.type`.
Triggers change events for changes on nested attributes.
Dependencies
============
Backbone >= 0.9.10
Installation
============
1. Include Backbone and it's dependencies in your page/app.
2. Include `distribution/deep-model.min.js`
Usage
=====
Then just have your models extend from Backbone.DeepModel instead of Backbone.Model.
Example code:
//Create models with nested attributes
var model = new Backbone.DeepModel({
id: 123,
user: {
type: 'Spy',
name: {
first: 'Sterling',
last: 'Archer'
}
},
otherSpies: [
{ name: 'Lana' },
{ name: 'Cyrril' }
]
});
//You can bind to change events on nested attributes
model.bind('change:user.name.first', function(model, val) {
console.log(val);
});
//Wildcards are supported
model.bind('change:user.*', function() {});
//Use set with a path name for nested attributes
//NOTE you must you quotation marks around the key name when using a path
model.set({
'user.name.first': 'Lana',
'user.name.last': 'Kang'
});
//Use get() with path names so you can create getters later
console.log(model.get('user.type')); // 'Spy'
//You can use index notation to fetch from arrays
console.log(model.get('otherSpies.0.name')) //'Lana'
Author
======
Charles Davison - [powmedia](http://github.com/powmedia)
Contributors
============
- [mattyway](https://github.com/mattyway)
- [AsaAyers](https://github.com/AsaAyers)
Changelog
=========
0.10.4:
- Fix #68 Model or collection in attributes are eliminated when defaults are used
0.10.0:
- Support Backbone 0.9.10
0.9.0:
- Support Backbone 0.9.9 (mattyway)
- Add support for deep model defaults (mattyway)
0.8.0:
- Allow nested attribute as Model identifier (milosdakic)
- Add AMD support (drd0rk)
- Added "change:*" event triggers for ancestors of nested attributes. (jessehouchins)
- JSHint linting (tony)
- Fix: undefined in setNested resulting from a recent change in backbone master. (evadnoob)
0.7.4:
- Fix: #22 model.hasChanged() is not reset after change event fires
- Fix: #18 Setting a deep property to the same value deletes the property (mikefrey)
- Allow setting nested attributes inside an attribute whose value is currently null (sqs)
0.7.3:
- Add DeepModel.keyPathSeparator to allow using custom path separators
0.7.2:
- Check if the child object exists, but isn't an object. #12 (tgriesser)
0.7.1:
- Model.changedAttributes now works with nested attributes.
- Fix getting attribute that is an empty object
0.7:
- Update for Backbone v0.9.2
|