【问题标题】:How to change rendered template in Meteor?如何更改 Meteor 中的渲染模板?
【发布时间】:2014-10-28 09:57:09
【问题描述】:

我在 HTML 文件中有一个 Meteor 模板:

<template name='main'> </template>

我使用 Iron 路由器渲染它:

Router.route('/', function () { this.render('main'); });

现在我想渲染另一个模板来替换“主”模板。怎么做?

【问题讨论】:

  • 如果这个问题是关于 Iron:router 的,你可能应该这样标记它,以避免混淆。你有更多的代码可以展示吗,回答这个问题的工作量会更少。
  • @BjornTipling 谢谢,我更正了答案。
  • 我假设您想要替换此模板作为某个用户操作的结果。那会是什么?
  • @apendua 点击某个元素
  • 那么改变路线还是直接点击?

标签: meteor iron-router


【解决方案1】:

显然您不想要另一条路线?

如果没有,您可以在路由器中使用响应式 var。当您更改变量时,它将再次运行并呈现您的其他模板。 见http://eventedmind.github.io/iron-router/#hooks

var OnBeforeActions;

OnBeforeActions = {
    whichMain: function() {
       if (reactiveVar) {
        this.render('otherMain');
      }
       else 
        this.next()  ;
    }
};

Router.onBeforeAction(OnBeforeActions.whichMain, {
    only: ['Main']
});

或者在主路由器中使用动态模板。

https://www.discovermeteor.com/blog/blaze-dynamic-template-includes/

【讨论】:

  • 谢谢!你能展示一下如何在路由器中使用反应式变量吗?我认为这是我需要的,但我不明白如何实现它。由于应用程序逻辑,在这种情况下我不想要另一条路线。
  • 不客气 - 请看这个:eventedmind.github.io/iron-router/#hooks Meteor.user 是让它重新运行的反应变量。我现在没有时间创建示例 - 我希望明天有。
  • 谢谢!如果我理解正确,我可以使if (reactiveVar) { this.render(reactiveVar); } 并且每次我分配reactiveVar='anotherMain' 时,页面都会使用 anotherMain 模板重新渲染,对吧?
  • 您想让路线名称动态化吗? (你会使用许多不同的路线吗?)我不知道这是否有效 - 猜猜它会!如果可行 - 您实际上不需要“if (reactiveVar)”部分。见eventedmind.github.io/iron-router/#hooks
  • 不,我不需要很多不同的路线。对于同一条路线,我需要许多不同的模板。我需要在用户点击时更改它们。
猜你喜欢
  • 1970-01-01
  • 2015-06-11
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 2012-05-02
  • 2013-04-07
  • 2014-07-23
  • 1970-01-01
相关资源
最近更新 更多