ember-data-has-many-through
v3.0.0
Published
A small Addon to forward hasMany of hasMany relationships to the grand-parent.
Downloads
5
Readme
Ember-data-has-many-through
A small Addon to concatenate array of arrays, including promiseArrays / Ember Data hasMany relationships, it provides three macros:
concat
allows to concatenate arrays of Ember Objects containing arrays.hasManyThroughNonObject
allows to concatenate hasMany relationships containing arrays.hasManyThrough
allows to concatenate hasMany relationships (or arrays of Ember Objects) containing hasMany relationships.
concat
This is the standard transposition of javascript's concat
method to Ember arrays:
// models/parent.js
import DS from 'ember-data';
import concat from 'dummy/macros/concat';
export default DS.Model.extend({
children: DS.hasMany('child'),
// or any other Array of Ember Objects containing arrays
filteredChildren: computed.filterBy('children', 'filterMe', true),
concatArray: concat('filteredChildren', 'simpleArray')
});
// models/child.js
import DS from 'ember-data';
export default DS.Model.extend({
filterMe: true,
simpleArray: []
});
hasManyThroughNonObject
Given an Ember-Data parent
model with a hasMany children
relationship on a child
model that has a simpleArray
Ember array,
then you can use the hasManyThroughNonObject
computed property provided by this addon to concatenate all the simpleArray
of child
models
into a single simpleArray
property on the parent
model.
// models/parent.js
import DS from 'ember-data';
import hasManyThroughNonObject from 'dummy/macros/has-many-through-non-object';
export default DS.Model.extend({
children: DS.hasMany('child'),
//concatenates each children's 'simpleArray' in to a single array
simpleArray: hasManyThroughNonObject('children'),
});
// models/child.js
import DS from 'ember-data';
export default DS.Model.extend({
simpleArray: []
});
hasManyThrough
Given an Ember-Data parent
model with a hasMany children
relationship on a child
model that itself has a hasMany childrenOfChild
relationship (or a childrenOfChildArray
standard array), then you can use the hasManyThrough
computed property provided by this addon to
concatenate all the childrenOfChild
of child models into a single childrenOfChild
property on the parent
model.
// models/parent.js
import DS from 'ember-data';
import hasManyThrough from 'dummy/macros/has-many-through';
export default DS.Model.extend({
children: DS.hasMany('child'),
// will concatenate the 'childrenOfChild' of each 'child' into a promiseArray CP
childrenOfChild: hasManyThrough('children'),
// if you want to name the property differently from the name given on the `children` hasMany property
childrenOfChildren: hasManyThrough('children', 'childrenOfChild'),
// this also works if the property on the 'child' model is an array (not a promise)
childrenOfChildArray: hasManyThrough('children')
});
// models/child.js
import DS from 'ember-data';
export default DS.Model.extend({
childrenOfChild: DS.hasMany('childOfChild'),
childrenOfChildArray: []
});
// models/child-of-child.js
import DS from 'ember-data';
export default DS.Model.extend({});
See the test/dummy app
for further details.
Installation
git clone
this repositorynpm install
bower install
Running
ember serve
- Visit your app at http://localhost:4200.
Running Tests
npm test
(Runsember try:testall
to test your Addon against multiple Ember versions)ember test
ember test --server
Building
ember build
For more information on using ember-cli, visit http://ember-cli.com/.