2015-06-02 113 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}}