覆盖Ember application.hbs模板

时间:2015-06-02 20:59:57

标签: javascript ember.js ember-cli handlebars.js

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

然而,

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

我在其他问题中看到的大部分答案都涉及到经过验证的路线的一种父路线,如下所示:

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

该解决方案产生了正确的URL,但它意味着链接到帮助者,并且必须使用' main.posts'等路线,这会让我误以为然,而且我&# 39;我希望不要在整个地方都有那种无关的路线。

在Rails中,我只是说layout: nil之类的内容,这会阻止主模板的应用。 Ember中是否有任何等价物,或者是另一种干净利落的目标?

2 个答案:

答案 0 :(得分:3)

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

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

{{link-to'posrs'}}将导航到您的帖子路线

答案 1 :(得分:0)

我有另一个解决方案

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

this post

中samselikoff的启发

====== EDIT ==

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

    //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}}