1

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

<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钩子来启动一些动画。因此,当我第一次将布尔值切换为 true 时,会显示我的 template1,但不会在以下开关上显示。

在 0.8 之前,渲染的事件被调用很多。现在有点少了。当模板不再在 DOM 中时,是否有可以用来销毁模板的选项或其他东西?


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

4

1 回答 1

1

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

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

现在任何时候Session.set("myBoolean", true),动画都会运行。

于 2014-05-10T03:05:05.837 回答