A adição de parâmetros de bloco ao ember.js v1.10 significa que agora você pode passar parâmetros ao entregar um componente a um bloco. Isso abre a porta para a colocação de várias partes de conteúdo em marcação estruturada definida no modelo do componente … onde ele pertence.
Digamos que você queira uma estrutura simples de cabeçalho / corpo / rodapé, como:
<div>
<header>My header</header>
<div class="body">My body</div>
<footer>My footer</footer>
</div>
Anteriormente, você poderia compor três subcomponentes com o componente de nível superior:
{{#my-comp}}
{{#my-comp-header}}My header{{/my-comp-header}}
{{#my-comp-body}}My body{{/my-comp-body}}
{{#my-comp-footer}}My footer{{/my-comp-footer}}
{{/my-comp}}
E os três modelos correspondentes (e talvez até um quarto se você tiver estrutura no nível superior, que vou deixar de fora).
<header>{{yield}}</header>
<footer>{{yield}}</footer>
<div class="body">{{yield}}</div>
Desta vez, vamos usar um modelo de nível superior como este:
<header>{{yield header}}</header>
<div class="body">{{yield body}}</div>
<footer>{{yield footer}}</footer>
Com um pouco de mágica na definição do componente:
App.MyCompComponent = Ember.Component.extend({
// homework: meta-programmed version
header: {isHeader: true},
footer: {isFooter: true},
body: {isBody: true}
});
E agora podemos instanciar o componente e definir suas seções usando if / else:
{{#my-comp as |section|}}
{{#if section.isHeader}}
My header
{{else if section.isBody}}
My body
{{else if section.isFooter}}
My footer
{{/if}}
{{/my-comp}}
E é isso!
Ainda estou para investigar se a marcação condicional de vários rendimentos deixa quaisquer redundâncias, mas em qualquer caso, ela está razoavelmente contida. Esperançosamente, é, ou pode ser otimizado pela estrutura.
JSBin: http://jsbin.com/ketahe/1