A small Addon to forward hasMany of hasMany relationships to the grand-parent.
npm install ember-data-has-many-throughA 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.
This is the standard transposition of javascript's concat method to Ember arrays:
`````javascript
// 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')
});
````
````javascript
// models/child.js
import DS from 'ember-data';
export default DS.Model.extend({
filterMe: true,
simpleArray: []
});
````
Given an Ember-Data parent model with a hasMany children relationship on a child model that has a simpleArray Ember array,hasManyThroughNonObject
then you can use the computed property provided by this addon to concatenate all the simpleArray of child modelssimpleArray
into a single property on the parent model.
````javascript
// 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'),
});
````
````javascript
// models/child.js
import DS from 'ember-data';
export default DS.Model.extend({
simpleArray: []
});
````
Given an Ember-Data parent model with a hasMany children relationship on a child model that itself has a hasMany childrenOfChild childrenOfChildArray
relationship (or a standard array), then you can use the hasManyThrough computed property provided by this addon to childrenOfChild
concatenate all the of child models into a single childrenOfChild property on the parent model.
````javascript
// 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')
});
````javascript
// models/child.js
import DS from 'ember-data';
export default DS.Model.extend({
childrenOfChild: DS.hasMany('childOfChild'),
childrenOfChildArray: []
});
````
````javascript
// models/child-of-child.js
import DS from 'ember-data';
export default DS.Model.extend({});
````
See the test/dummy app for further details.
* git clone this repositorynpm install
* bower install
*
* ember serve
* Visit your app at http://localhost:4200.
* npm test (Runs ember try:testall to test your Addon against multiple Ember versions)ember test
* ember test --server
*
* ember build`
For more information on using ember-cli, visit http://ember-cli.com/.