覆盖 Ember application.hbs 模板

Override Ember application.hbs template

我有一个 Ember JS 应用程序,其中 99% 的资源都在根级别,用户必须登录才能访问。所有这些资源(/login 除外)都具有相同的模板。

然而,

/login 有一个完全不同的模板(没有导航栏等)。覆盖登录页面的 application.hbs 模板的最佳方法是什么?

我在其他问题中看到的大多数答案都涉及一种用于经过身份验证的路由的父路由,如下所示:

this.route('login');
this.route('main', { path: '/' }, function() {
  this.route('posts');
});

该解决方案产生了正确的 URL,但它意味着 link-to helpers 等必须使用 'main.posts' 等路由,这让我误会了,而且我不想到处都有那个无关的路由级别。

在 Rails 中,我只会说 layout: nil 之类的内容,这样会阻止应用主模板。在 Ember 中是否有任何等价物,或者另一种方法可以干净地实现相同的目标?

摆脱{{link-到'main.posts'}}。您可以将 {resetNamespace:true} 添加到给定路由。

this.route('main', {path:'/'}, () => {
    this.route('posts', {resetNamespace:true});
});

{{link-to 'posts'}} 将导航到您的帖子路径

我有另一个解决方案

    {{!-- application.hbs --}}
    {{#if session.isAuthenticated}} 
      {{outlet}}
    {{else}}
      Then the welcome/login page goes here
    {{/if}}

灵感来自 this post

中的 samselikoff

======编辑======

也许我们甚至可以做到这一点

    //in app/routes/login.js
    export default Ember.Route.extend({
      renderTemplate: function() {
        this.render({ outlet: 'un-auth' });
      }
    });

    {{!-- application.hbs --}}
    {{#if session.isAuthenticated}} 
      {{outlet}}
    {{else}}
      {{outlet "un-auth"}}
    {{/if}}