2015-01-08 41 views
0

我有一個應用程序路由將模板渲染到名爲'sidebar'的插座中,這應該可以在整個應用程序中查看。我已經設置了一個快速示例here恢復應用程序路由中設置的出口內容

當我進入其中一條路線時(在我的示例中,顏色路線),此插座將呈現不同的模板,並且當您導航到應用中的另一條路線時,它應該顯示最初存在的側邊欄。

這不會自動發生,我明白這是因爲一旦ApplciationRoute已被輸入,這是當第一次加載應用程序時,renderTemplate被調用,並且不會再次調用,直到頁面刷新。這對我有意義,但我不確定如何解決這個問題。

我試過在ColorRoutewillTransition動作下再次調用Route#render方法,但它不起作用。

... 
actions: { 
    willTransition: function() { 
     this.render('color.sidebar', { 
      into: 'application', 
      outlet: 'sidebar' 
     }); 
    } 
} 
... 

回答

1

我只是想出了另一種「變通」這個,而不是一個命名出口。

而不是{{ outlet "sidebar" }}application模板只需使用{{ x-sidebar }}

然後,定義x-sidebar組件模板如下:

<script type="text/x-handlebars" id="components/x-sidebar"> 
    {{partial sidebar }} 
    </script> 

所以,現在你的新創建的組件期待一個sidebar屬性來告訴它要顯示哪個模板。

,當您使用的組件,像這樣您可以傳遞一個屬性:

{{ x-sidebar sidebar=sidebar }} 

然後,您可以使用activate/deactivate鉤子鉤住你的路由設置sidebar屬性application控制器上,例如:

App.ColorRoute = Ember.Route.extend({ 
    model: function(params) { 
    return params.color; 
    }, 

    activate: function(){ 
    this.controllerFor('application').set('sidebar', 'color/sidebar'); 
    }, 
    deactivate: function(){ 
    this.controllerFor('application').set('sidebar', 'sidebar'); 
    } 

}); 

工作解決方案here

+0

大多數情況下,這看起來都是一個很好的解決方案,但是我需要邊欄來顯示有關所顯示模型的數據(例如所選顏色)。我不認爲我可以在激活鉤子中獲取模型數據? – Josh

+0

確實如此,但是您可以隨時從'afterModel'掛接http://jsbin.com/cuzuxu/4/edit?html,js,output – Kalman

+0

通過。沒有想到這一點。我喜歡。 – Josh

相關問題