如何在路由之间重用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 通常不会重新呈现路由之间的布局:

http://meteorpad.com/pad/qcu8QWASvPEjDEf5k/IR