Ember.js中的多个布局?

时间:2013-06-24 21:44:29

标签: layout ember.js

来自Rails背景,您可以拥有多个布局 - 例如,匿名用户页面,然后是经过身份验证的页面。

Ember可以实现吗?

我尝试在我的UsersRouter中声明一个新的templateName,但没有用。

我还查看过本指南:http://emberjs.com/guides/views/adding-layouts-to-views/

但它似乎不起作用:/

1 个答案:

答案 0 :(得分:6)

您可以在{{render}}帮助程序中使用if来显示不同的布局。

例如,如果您的ApplicationControllerloginlogout动作处理程序,并且有相应的`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挂钩加载,您可以覆盖renderTemplate的{​​{1}}方法。

ApplicationRoute