流星;如何在0.8中销毁模板

时间:2014-05-09 23:20:35

标签: meteor meteor-blaze

我有两个备用模板的布局:

<template name="MyLayout">

    {{#if myBoolean}}
        {{> template1}}
    {{else}}
        {{> template2}}
    {{/if}}

</template>

当我将布尔值切换为true(初始化为false)时,会触发Template.template1.rendered = function () {};。但是当我将其切换为false时,不会触发Template.template1.destroyed挂钩。当我将其切换回true时,Template.template1.rendered事件也不会被触发。

问题是我使用rendered钩子来启动一些动画。所以我的template1在我第一次将布尔值切换为true时显示,而不是在以下开关上显示。

在0.8之前,渲染的事件被调用了很多。现在它有点少。当它不在DOM中时,是否有一个选项可以用来销毁我的模板?


顺便说一句:为了使它工作,我仍然有一个丑陋的解决方案,在template1的中间放一个帮助器。每次将模板添加到DOM时都会调用该帮助程序;所以我可以从那里开始我的动画。但这很难看。

1 个答案:

答案 0 :(得分:1)

MasterLayout仍在那里;只有子模板已被销毁。您可以使用子模板rendered / destroyed处理程序。如果动画仅与父模板元素相关,则您可能能够创建一个自动运行功能,该功能根据您的反应式布尔变量启动动画。例如,假设您的布尔值是Session变量(尽管它可以与任何反应变量一起使用):

Deps.autorun(function() {
  if (Session.get("myBoolean")) {
    // start animation
  }
});

现在,只要你Session.set("myBoolean", true),动画就会运行。