Reatividade, isolamento e listas
Há algo sobre reatividade que eu simplesmente não entendo, especificamente com listas. Meu problema pode ser mais facilmente modelado com o exemplo de cabeçalho (meteor --create example leaderboard
)
Primeiro, adicione isso ao lado do cliente js (como é feito emhttp://listtest.meteor.com/):
Template.player.rendered = function () {
console.log('Player rendered');
}
... e depois observe o console enquanto você executa o aplicativo. Quando você troca o cientista selecionado, você notará quecada jogador re-renderiza, mesmo quando não precisa.
Graças a alguma ajuda no IRC, descobri que sub-modelagem ou #isolating a parte inferior do modelo principal como abaixo (e emhttp://listtest2.meteor.com/ resolve a ineficiência. Em outras palavras, quando um jogador diferente é selecionado, apenas dois jogadores são renderizados novamente: o recém-selecionado e o desmarcado.
<head>
<title>Leaderboard</title>
</head>
<body>
<div id="outer">
{{> leaderboard}}
</div>
</body>
<template name="leaderboard">
<div class="leaderboard">
{{#each players}}
{{> player}}
{{/each}}
</div>
{{#isolate}}
{{#if selected_name}}
<div class="details">
<div class="name">{{selected_name}}</div>
<input type="button" class="inc" value="Give 5 points" />
</div>
{{/if}}
{{#unless selected_name}}
<div class="none">Click a player to select</div>
{{/unless}}
{{/isolate}}
</template>
<template name="player">
<div class="player {{selected}}">
<span class="name">{{name}}</span>
<span class="score">{{score}}</span>
</div>
</template>
Minha pergunta é: por que isolar uma parte diferente de um modelo causadiferente o comportamento do submodelo para mudar?
Muito obrigado.