ember-data-has-many-through
v3.0.0
Published
A small Addon to forward hasMany of hasMany relationships to the grand-parent.
Readme
Ember-data-has-many-through
A small Addon to concatenate array of arrays, including promiseArrays / Ember Data hasMany relationships, it provides three macros:
concatallows to concatenate arrays of Ember Objects containing arrays.hasManyThroughNonObjectallows to concatenate hasMany relationships containing arrays.hasManyThroughallows 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 clonethis repositorynpm installbower install
Running
ember serve- Visit your app at http://localhost:4200.
Running Tests
npm test(Runsember try:testallto test your Addon against multiple Ember versions)ember testember test --server
Building
ember build
For more information on using ember-cli, visit http://ember-cli.com/.
