2013-06-24 61 views

回答

6

可以使用{{render}}if幫手內顯示不同的佈局。

例如,如果你有一個具有loginlogout動作處理程序的ApplicationController,以及相應的`的loggedIn的財產。

App.ApplicationController = Ember.Controller.extend({ 
    loggedIn: false, 

    login: function() { 
    this.set('loggedIn', true); 
    }, 

    logout: function() { 
    this.set('loggedIn', false); 
    } 
}); 

您可以像這樣綁定到應用程序模板中的loggedIn屬性。

<script type='text/x-handlebars' data-template-name='application'> 
<button {{action login }}>Login</button> 
<button {{action logout }}>Logout</button> 

{{#if loggedIn}} 
    {{render 'user'}} 
{{else}} 
    {{render 'guest'}} 
{{/if}} 

</script> 

userguest對應的模板。

<script type='text/x-handlebars' data-template-name='user'> 
<h1>User layout</h1> 
<div class='box user'> 
{{outlet}} 
</div> 
</script> 

<script type='text/x-handlebars' data-template-name='guest'> 
<h1>Guest layout</h1> 
<div class='box guest'> 
{{outlet}} 
</div> 
</script> 

這裏有一個工作jsbin

編輯:要不使用基於某些靜態標準的應用程序路徑或通過model鉤子加載,您可以覆蓋ApplicationRouterenderTemplate方法。

App.ApplicationRoute = Ember.Route.extend({ 
    renderTemplate: function() { 
    var loggedIn = false; 
    if (loggedIn) { 
     this.render('user'); 
    } else { 
     this.render('guest'); 
    } 
    } 
}); 
+0

啊......好吧。所以 - 無論如何,你必須在應用程序模板本身內部做所有事情**。 澄清:無法擁有應用程序模板和管理模板。 相反,您必須擁有一個應用程序模板,該應用程序模板包含用於呈現特定子模板的特定邏輯。 這是正確的嗎? – watts

+0

不一定。我以應用程序模板爲例。您也可以在路線特定的模板中執行此操作。 –

+0

啊,好的 - 這是一個特定路線的模板。 – watts