2

私がこのコードを持っているとすると:

Ember.App.View = Ember.View.extend({
    templateName: "templateA"
});
Ember.App.View = Ember.View.extend({
    templateName: "templateB"
});
Ember.App.ViewC = Ember.CollectionView.extend({
    itemViewClass: "Ember.View",
    contentBinding: "SomeController"
});

異なるテンプレートのビューをCollectionViewに追加する方法はありますか?

4

3 に答える 3

6

計算さtemplateNameれたプロパティを作成できます。 http://jsfiddle.net/pangratz666/vGHcD/を参照してください。itemViewClass

App.MyView = Ember.View.extend({
    templateName: function() {
        var templateName = Ember.getPath(this, 'content.label');
        // return default template if there is no such template 
        return (!Ember.TEMPLATES[templateName]) ? 'default' : templateName;
    }.property('content.label').cacheable(),

    // rerender the view if the template name changes
    _templateNameChanged: function() {
        this.rerender();
    }.observes('templateName')
});

App.CollectionView = Ember.CollectionView.extend({
    itemViewClass: 'App.MyView'
});

関連する質問もご覧ください: Ember.js を使用してモデル タイプ/オブジェクト値でビュー テンプレートを選択してください

于 2012-04-19T09:50:12.860 に答える
0

別の解決策は、ghempton/ember-layoutを使用することです。 http://jsfiddle.net/pangratz666/XhfYy/を参照してください。

App.ViewA = Ember.View.extend({
    templateName: "templateA"
});
App.ViewB = Ember.View.extend({
    templateName: "templateB"
});

App.ItemView = Ember.View.extend({
    template: Ember.Handlebars.compile('{{dynamicView content}}')
});

App.CollectionView = Ember.CollectionView.extend({
    itemViewClass: 'App.ItemView'
});

App.controller = Ember.ArrayProxy.create({
    content: [App.ViewA.create(), App.ViewB.create()]
});​
于 2012-04-19T11:17:23.163 に答える