【问题标题】:Meteor ; how to destroy the template in 0.8流星;如何在 0.8 中销毁模板
【发布时间】:2014-05-10 16:48:30
【问题描述】:

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

<template name="MyLayout">

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

</template>

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

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

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


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

【问题讨论】:

    标签: meteor meteor-blaze


    【解决方案1】:

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

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

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

    【讨论】:

    • 对不起,我的错。我确实粘贴得很快。侦听器位于子模板上,而不是主布局上。在 Meteor 的最后一个版本中,模板在从 DOM 中移除时不再被销毁。它们仍然存在于记忆中。
    • 我试图重现您的问题,但回调按预期工作。 Here's the code 我在 0.8.1.1 上测试过。
    • 嗯...你是对的。我必须弄清楚我在项目中搞砸了什么。谢谢你:)
    • (顺便说一句,布尔值对我来说并不完全是布尔值,它是一个currentUser 助手)
    猜你喜欢
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2014-04-01
    • 2018-05-19
    相关资源
    最近更新 更多