In case you also need mutable view class you can use following tooling:
listview.hbs
{{each item in list itemViewClass=view.Item}}
listview.js
import Ember from 'ember';
import { mutableView } from 'utils/mutable-view';
export default Ember.View.extend({
Item: mutableView('content.type', function (type, container) {
if (type === 'type_a') {
return container.lookupFactory('view:item-a-view');
}
if (type === 'type_b') {
return container.lookupFactory('view:item-b-view');
}
}),
});
and finally the utility method mutableView of mutable-view.js
import Ember from 'ember';
var mutableViewTemplate = Ember.Handlebars.compile('{{view view.DynamicView content=view.content}}');
export var mutableView = function(observes, viewSelector) {
return Ember.View.extend({
template: mutableViewTemplate,
__dynamicViewCache: {},
DynamicView: Ember.computed(observes, function () {
var view;
var cache = this.get('__dynamicViewCache');
var modificator = this.get(observes);
view = cache[modificator];
if (view) {
return view;
}
view = viewSelector(modificator, this.get('container'));
if (view) {
cache[modificator] = view;
return view;
}
throw new Error(`Cannot determine view class for '${modificator}' of '${observes} '`);
})
});
};