如何在路由之间重用layoutTemplate?
How to reuse layoutTemplate between routes?
查看 devtools 分析,当我在具有相同 layoutTemplate
的两条路线之间移动时,布局的助手正在重新运行,看起来 HTML 也在重新渲染。我怎样才能让 Iron Router 只渲染产量而单独保留布局?
编辑代码:
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
在路线改变时被调用(仅当数据改变时)。
layoutTemplate
中的代码呈现并且助手和回调将始终重新运行 因为它至少需要 re-run 嵌套在其中的 {{> yield}}
。否则没有必要使用 layoutTemplate
.
如果您的代码只应 运行 一次,我建议将其分解为另一个模板,该模板就在附近,不会随着路径的变化而改变。 layoutTemplate
代码重新运行s 因为它必须。
edit - 以下可能行不通,但我认为应该 - edit
您可以尝试的另一件事是将代码放入 Template.layout.onCreated();
模板创建一次,并且可以在 destroy
导航到一个页面之前多次 re-rendered不使用该特定模板。
header模板
<template name="header">
</template>
Template.header.onRendered(function(){
});
Template.header.events({
});
Template.header.helpers({
});
<template name="layout">
{{> header }}
{{> yield }}
</template>
我的应用有些异常,因为 IT 通常不会重新呈现路由之间的布局:
查看 devtools 分析,当我在具有相同 layoutTemplate
的两条路线之间移动时,布局的助手正在重新运行,看起来 HTML 也在重新渲染。我怎样才能让 Iron Router 只渲染产量而单独保留布局?
编辑代码:
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
在路线改变时被调用(仅当数据改变时)。
layoutTemplate
中的代码呈现并且助手和回调将始终重新运行 因为它至少需要 re-run 嵌套在其中的 {{> yield}}
。否则没有必要使用 layoutTemplate
.
如果您的代码只应 运行 一次,我建议将其分解为另一个模板,该模板就在附近,不会随着路径的变化而改变。 layoutTemplate
代码重新运行s 因为它必须。
edit - 以下可能行不通,但我认为应该 - edit
您可以尝试的另一件事是将代码放入 Template.layout.onCreated();
模板创建一次,并且可以在 destroy
导航到一个页面之前多次 re-rendered不使用该特定模板。
header模板
<template name="header">
</template>
Template.header.onRendered(function(){
});
Template.header.events({
});
Template.header.helpers({
});
<template name="layout">
{{> header }}
{{> yield }}
</template>
我的应用有些异常,因为 IT 通常不会重新呈现路由之间的布局: