查看devtools分析,当我在具有相同layoutTemplate
的两个路由之间移动时,布局的帮助程序正在重新运行,并且看起来HTML也被重新渲染。我怎样才能让铁路由器只渲染产量并单独留下布局?
编辑代码:
Router.map ->
@route '/foo',
layoutTemplate: 'headered'
@route '/bar',
layoutTemplate: 'headered'
Template.headered.helpers
test: ->
console.log 'gets run when switching from /foo to /bar'
<template name="headered">
{{test}}
<header>
{{getReactiveData}}
</header>
{{> yield}}
</template>
我不希望重新呈现<header>
节点。我不希望在路线发生变化时调用getReactiveData
(仅在数据发生变化时)。
答案 0 :(得分:1)
layoutTemplate
中的代码呈现,帮助程序和回调将始终重新运行,因为它至少需要重新运行嵌套在其中的{{> yield}}
。否则,使用layoutTemplate
毫无意义。
如果你的代码只能运行一次,我建议将其分解为另一个模板,这个模板只是坐在一起,并且在从路径到路径时不会发生变化。 layoutTemplate
代码重新运行,因为它必须。
修改 - 以下内容可能不起作用,但我认为应该 - 修改
您可以尝试的另一件事是将代码放入Template.layout.onCreated();
模板创建一次,并且可以在destroy
之前多次重新呈现模板,方法是导航到不会出现的页面。使用该特定模板。
标题模板
<template name="header">
</template>
Template.header.onRendered(function(){
});
Template.header.events({
});
Template.header.helpers({
});
<template name="layout">
{{> header }}
{{> yield }}
</template>
答案 1 :(得分:0)
我的应用程序存在异常,因为IR通常不会重新渲染路线之间的布局: