有一些关于反应性我只是不明白,特别是与列表。我的问题可以很容易地用领导板示例(meteor --create example leaderboard)建模。
首先,将其添加到客户端js (正如在http://listtest.meteor.com/中所做的那样):
Template.player.rendered = function () {
console.log('Player rendered');
}然后,当您运行应用程序时,...and会查看控制台。当您切换选定的科学家,您会注意到,每个播放器重新呈现,即使它不需要。
由于对IRC的一些帮助,我发现子模板或#隔离主模板底部的部分如下所示(在http://listtest2.meteor.com/上解决了效率低下的问题。换句话说,当一个不同的玩家被选中时,现在只有两个玩家被重新呈现:新选择的和被取消选举的。
<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>我的问题是:为什么隔离模板的不同部分会导致不同的子模板的行为发生变化?
非常感谢。
发布于 2013-08-01 06:04:43
在流星记录中可以找到解释:
反应性隔离 每个模板作为自己的反应性计算运行。当模板访问反应性数据源(例如通过调用Session.get或进行数据库查询)时,这将建立一个数据依赖关系,该依赖关系将导致整个模板在数据更改时重新呈现。这意味着,特定更改的重呈现量受将HTML划分为模板的方式的影响。 通常,重新呈现的确切范围并不重要,但是如果您想要更多的控制(例如出于性能原因),可以使用{{#隔离}}.{/isolate}}助手。在#隔离块中建立的数据依赖关系是本地化在块上的,它们本身不会导致父模板被重新呈现。这个块助手本质上传递了通过将内容提取到一个新的子模板而获得的反应性好处。
https://stackoverflow.com/questions/17960366
复制相似问题