【问题标题】:Startup page on MeteorMeteor 的启动页面
【发布时间】:2016-05-19 04:42:13
【问题描述】:

我正在尝试将第一页设置为在我的流星应用程序中加载,具体取决于用户是否已注册。 (如果用户未登录,则加载 x 模板,否则加载登录模板)。

我遇到的问题是我的登录模板包含指向其他模板(恢复密码和注册)的链接,这些模板不起作用(页面始终停留在登录模板中,可能是我的“if currentUser”子句) .可能我以错误的方式接近它。

知道如何设置要加载的第一页吗?这是我的html:

<template name="main">
  {{#if currentUser}}
    {{> header}}
    {{> yield}}
  {{else}}
    {{> entrySignUp}}
  {{/if}}
</template>

<template name="home">
  {{#if eventJoined}}
    {{> board}}
  {{else}}
    {{> findEvent}}
  {{/if}}
</template>

这些是我的路线。 Myapp.js:

Router.route ('/home')
Router.route('/', { template: 'home'});
Router.configure({layoutTemplate: 'main'});
Router.route('/findEvent');
Router.route('/board');

【问题讨论】:

  • 您能否添加您的路线代码和所有相关代码?问题可能是您的 {{> yield}} 仅适用于 currentUser。 Iron:router 需要一个 {{> yield}} 来渲染其余的路由/模板。
  • 好的,我已经编辑了问题。

标签: javascript meteor


【解决方案1】:

你需要像这样指定哪个路由渲染哪个模板:

Router.configure({
    layoutTemplate:'mainTemplateName',
    loadingTemplate: 'loadingTempName'
});

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

Router.route('/another-route', function() {
    this.render('anotherTemplate');
});

这些模板中的任何一个都将呈现给 {{> yield}},因此,如果您将其包含在 if currentUser 中,它将无法为非用户呈现这些模板。

编辑

您的主/布局模板应包含布局的主要元素,如导航栏、页脚、侧边栏等。它们仅在用户进入网站时呈现一次。 {{> yield}} 指定当用户转到其他路线时其余模板应呈现的位置,而不更改/重新呈现布局/主模板中的元素

EDIT-2 在你的主模板中,你有这个:

{{#if currentUser}}
  {{> header}}
  {{> yield}}
{{else}}
  {{> entrySignUp}}
{{/if}}

这意味着 Iron:router 的 {{&gt; yield}} 仅适用于已登录的用户。您需要为所有访问者提供收益,以便用户可以转到其他路线/铁路由器可以呈现其他模板,如您在问题中所写的恢复密码/注册。因此,将{{&gt; yield}} 包含在{{#if currentUser}} 之外,并在其他任何需要的地方使用它。例如:

主模板:

<template name="layout">
    {{> navigation}}

    <div class="content-area">
        {{> yield}}
    </div>
</template>

<template name="navigation">
    This will always be visible in every route according to the template above.
</template>

您还可以检查您的 router.js 以确定要呈现的内容,如下所示:

Router.route('/', function() {
    if(Meteor.user()){
        this.render('someTemplate') //for logged in user in route '/'
    } else {
        this.render('entrySignUp');
    }
});

Router.route('/findEvent');
Router.route('/board');

在这种情况下,无论你走哪条路线,上面的模板将始终呈现给{{&gt; yield}},而不取决于它是否是用户,但 {{> yield}} 应该可用于登录和登录在您的情况下,将 Iron Router 的用户排除在实际上有一个地方为非用户呈现模板。

【讨论】:

  • 实际上我的路由名称和模板名称之间有对应关系(路由/模板具有相同的名称),这就是为什么 Iron Router 不需要我在 render 子句中具体说明。如果我需要更改 HTML 或删除 #if currentUser,我不清楚您的回答
  • {{> yield}} 是 iron:router 渲染模板的地方。你告诉 Iron 路由器为 currentUser 渲染它。那是错误的。产量应该是当前用户和非用户。它的地方铁:路由器为任何人呈现任何模板所以是的,你应该改变你的html。
  • @Ruben Okay 更新了我的答案。请注意,我没有使用您所拥有的确切模板名称/结构编写代码。
  • 有一种方法不会为登录和退出模板加载布局模板?
  • 你的主模板总是加载,但你可以用 if currentUser 隐藏它的部分。您不必将所有内容都包含在 currentUser 块中。例如,如果您将我的示例中的 {{> navigation}} 包装在 {{#if currentUser}} 中,则访问者可以转到路线,但导航仅对登录用户可见。
猜你喜欢
  • 2010-09-18
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多