如何在路由之间重用layoutTemplate?

时间:2015-06-18 18:18:45

标签: meteor iron-router

查看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(仅在数据发生变化时)。

2 个答案:

答案 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通常不会重新渲染路线之间的布局:

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