【问题标题】:Re-rendering/swapping templates after being removed from DOM从 DOM 中删除后重新渲染/交换模板
【发布时间】:2013-01-09 23:03:32
【问题描述】:

目前我有以下布局:

<div id="main">
    {{> my_template}} 
</div>

现在稍后我有一个选择器$("#main") 并使用html(..) 更改内容以显示集合中的记录。

所以现在可能是这样的:

<div id="main">
    <h1>A title...</h1>
    <p>some text</p>
</div>   

或者可能是这样(如果我知道的话):

<div id="main">
    {{> another_template}} 
</div>

这样做的正确方法是什么,以便我可以将我的 my_template 重新渲染/替换为其他模板?我必须使用Meteor.render 吗?我该怎么做?

编辑:
我需要对仅具有 HTML 且没有响应式模板变量的模板进行此操作的更多说明。如何使用Session 启用/禁用它?

<template name="newForm">
    <form>
        <input..>
        <textarea..></textarea>
        <!-- more fields.. -->        
    </form> 
</template>

我将如何使用Template.newForm 来隐藏它?在这种情况下我还应该使用Template 吗?

【问题讨论】:

标签: javascript html dom meteor


【解决方案1】:

您可以将所有备用模板并排放置:

<div id="main">
    {{> my_template}} 
    {{> another_template}}
    {{> yet_another_template}}
</div>

只需确保在您的代码中一次只显示其中一个。例如:

Template.my_template = function() {
  if (Session.equals("template_to_show", "my_template")) {
    return SomeCollection.find();
  }
}
Template.another_template = function() {
  if (Session.equals("template_to_show", "another_template")) {
    return SomeOtherCollection.find();
  }
}
// etc

【讨论】:

  • 我是否只是在我想要隐藏的模板的选择器上执行display:none,反之亦然?这样做的惯例是什么?
  • 不,如果你使用我向你展示的代码,当渲染条件为假时,Meteor 将从 DOM 中删除模板。您不需要自己隐藏或显示 DOM 元素。
  • 它如何准确地知道会话变量何时更改,或何时执行if?是否有隐藏事件被触发/捕获?
  • 你应该看看Meteor docs,它解释了 Meteor 的基本原理和概念,包括 Session 是如何工作的(它是一个反应变量;当它发生变化时,依赖关系会由 Meteor 自动触发)。跨度>
猜你喜欢
  • 2019-01-29
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
  • 2022-07-23
  • 1970-01-01
  • 2015-04-06
  • 2016-01-08
  • 1970-01-01
相关资源
最近更新 更多