2013-07-08 14 views
5

Sto tentando di creare un CollectionView con un elenco di elementi e di renderlo nel modello specificato nella proprietà templateName di CollectionView. Tuttavia, non riesco a farlo funzionare.Come utilizzare un modello con Ember.CollectionView

Sembra che questo:

App = Ember.Application.create({}); 

App.ItemView = Ember.View.extend({ 
    templateName: 'item_template', 
    tagName: 'li' 
}); 

App.CollectionViewTest = Ember.CollectionView.extend({ 
    templateName: 'collection_template', 
    itemViewClass: App.ItemView, 

    content: [ 
     { title: 'Item 1' }, 
     { title: 'Item 2' } 
    ] 
}); 

con i modelli di questo tipo:

<script type="text/x-handlebars" data-template-name="application"> 
    <h1>Testing CollectionView TemplateName</h1> 
    {{collection App.CollectionViewTest}} 
</script> 

<script type="text/x-handlebars" data-template-name="collection_template"> 
    <h2>The CollectionView Template</h2> 
    <ul> 
     {{outlet}} 
    </ul> 
</script> 

<script type="text/x-handlebars" data-template-name="item_template"> 
    {{title}} 
</script> 

Così com'è, il <h2> non viene mai reso, a meno che non posso cambiare App.CollectionViewTest ad un Ember.View, ma poi, ovviamente, , non ci sono voci di elenco.

È un bug? O mi sta sfuggendo qualcosa?

- ecco un violino con il codice js: http://jsfiddle.net/S46vH/

+0

il tuo http://jsfiddle.net/S46vH/ è praticamente vuoto, hai salvato l'ultima versione prima di postare qui il link? – intuitivepixel

+0

oops, no. avrebbe dovuto essere: http://jsfiddle.net/S46vH/1/ ma il problema è risolto ora. Grazie a qualsiasi modo. – rainbowFish

risposta

4

Dal Ember.CollectionView è una sottoclasse di Ember.ContainerView, non ha un modello a sé stante.

Dalle documentazione API:

Un modello, templateName, DefaultTemplate, disposizione, NomeFormato o proprietà defaultLayout una vista del contenitore non si tradurrà nel modello o il layout di essere resi. I contenuti HTML della rappresentazione DOM di Ember.ContainerView saranno solo l'HTML reso delle sue viste secondarie.

Per eseguire questa operazione è possibile spostare la marcatura collection_template nel modello di applicazione o renderla parziale. Quindi sostituire {{outlet}} con {{collection App.CollectionViewTest}}

+3

ah, questo ha senso. Ero confuso dal fatto che 'template' e' templateName' sono entrambi elencati come proprietà nella pagina 'CollectionView' dell'API Ember. Grazie per il consiglio! – rainbowFish

+0

Sì, questo mi ha fatto inciampare anche un paio di volte. –