2015-06-02 72 views
3

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

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

大多数我在其他问题看问题的答案涉及一种父路由的经过身份验证的路线,像这样:

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

这种解决方案产生了正确的网址,但它意味着链接到佣工和这样的必须使用'main.posts'等路线,这会磨擦我错误的方式,并且我不希望在整个地方都有这种无关的路线。

在Rails中,我只是说一些类似layout: nil,并且这将阻止主模板被应用。 Ember中是否有任何等价物,或者是另一种干净地实现相同目标的方法?

回答

3

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

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

{{链接到 '信息'}}将浏览到您的文章航线

+0

好极了!只是为了持平,有什么办法可以将resetNameSpace参数应用于该级别的所有嵌套路由? (所以它不必被添加到每个路由) – Asherlc

+0

不是我所知道的,您可以扩展routerDSL以支持此功能 – xoma

+0

单挑:这将更改项目文件将在Ember CLI中的位置。 – locks

0

我得到了另一种解决方案

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

通过samselikoff启发this post

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

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

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