I think recreating SortableMixin / ArrayController is contradictory to “everything should be a component” because mixins and controllers are not components.
A quick explanation of “explicit transformation to a model”:
You pass in a model to your component:
{{my-component data=model}}
The model you pass in either is or contains an array. Let’s assume the latter, and say that data.items (in the context of the component) is an array you would like to sort using a property ‘date’. Then in your component you create a computed property ‘sortedItems’:
sortedItemsProps: ['date:asc'],
sortedItems: Ember.computed.sort('data.items', 'sortedItemsProps'),
Then in your component’s template somewhere you can #each over sortedItems:
{{#each sortedItems as |item|}}
{{another-component-acting-like-an-item-controller data=item}}
{{/each}}
This is ‘explicit’ in the sense there is no abstraction… you can see exactly what is going on and no details are hidden from you.
It is a ‘transformation’ in the sense that you are transforming ‘data.items’ to ‘sortedItems’. You can use additional transformations through by composing computed properties.
And of course what you are transforming is the model or a part thereof which originally came from a route.