【问题标题】:Meteor prevent template from rendering depending on a conditionMeteor 根据条件阻止模板渲染
【发布时间】:2018-04-21 14:10:37
【问题描述】:

我有一种情况,用户被重定向到一个模板(比如 I )。 在模板 I 中,有一个条件可以确定我们是否应该渲染该模板或重定向到其他地方。

我现在的做法是检查Template.I.onCreated() 中的条件,如果条件为真,则将window.location.href 放入新的网址。

但这有时会导致模板 I 在重定向之前短暂出现在屏幕上。

我需要一种方法来阻止这种情况的发生。我认为 onCreated() 在 onRendered() 之前触发,所以它应该阻止它。但这似乎仍然不起作用。

【问题讨论】:

  • 最好在路由器中这样做
  • @MichelFloyd 是正确的 - 最好让路由器控制它而不是手动更改窗口位置。您能描述一下您正在检查的情况吗?
  • @MichelFloyd 我不想使用路由器,因为被重定向到的页面位于一个新模板中,其中有一些脚本在我完全重新加载页面之前不会加载。似乎 Iron 路由器不允许我们运行嵌入在模板片段中的脚本(是吗?)
  • 您是否尝试使用外部脚本?在单页应用程序中,您永远不需要“重新加载”任何页面,这意味着某些内容已损坏。
  • @ᴄʜaᴢsᴏʟᴏ 我努力使用 Iron 路由器的 onBeforeAction 修复它,效果很好。为什么我使用外部脚本在我之前的评论中

标签: meteor meteor-blaze


【解决方案1】:

有条件地在 blaze 中渲染模板的最简单方法是用 {{# if}} 包装它:

<template name="parentTemplate">
{{#if someCondition}}
  {{> childTemplate }}
{{/if}}
</template>

您可以在 js 中定义一个帮助器,它为 someCondition 返回一个真值或假值。无需在onCreated 中做任何事情。

强烈建议不要通过window.location.href 更改网址。这将导致重新加载整个应用程序,包括所有订阅。

【讨论】:

  • 我在 cmets 中针对 Iron 路由器的 onBeforeAction 修复了您的建议。你可以相应地更新你的答案,我会接受赞成:)
  • 那个属于@chazsolo!
猜你喜欢
  • 2013-09-02
  • 2017-06-25
  • 1970-01-01
  • 2014-12-12
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 2013-01-22
相关资源
最近更新 更多