有很多方法可以完成这项工作。您描述的第一种方法与我们正在做的最接近。在过去的 ember 版本中,我们为此使用了视图助手,今天我们使用{{render}}
但它是相同的基本概念。例如,application.hbs 可能如下所示:
{{render navbar}} {{outlet}}
现在 navbar.hbs 可以使用一个简单的{{#if}}
助手来根据登录状态交换链接。
<div class="navbar">
<div class="navbar-inner">
{{#linkTo index class="brand"}}My App{{/linkTo}}
<ul class="nav">
<li>{{#linkTo index}}Home{{/linkTo}}</li>
<li>{{#linkTo about}}About{{/linkTo}}</a></li>
</ul>
<ul class="nav pull-right">
{{#if isAuthenticated}}
<li><a {{action logout}} href="#">Logout</a></li>
{{else}}
<li><a {{action login}} href="#">Login</a></li>
{{/if}}
</ul>
</div>
</div>
现在我们向 NavbarController 添加逻辑来跟踪和管理登录状态。
App.NavbarController = Ember.ArrayController.extend({
isAuthenticated: false,
login: function() {
this.set('isAuthenticated', true);
},
logout: function() {
this.set('isAuthenticated', false);
}
});
In a real app NavbarController would proxy these requests to another controller, perhaps currentUserController
. I've created a working sample here: http://jsbin.com/iyijaf/6/edit