4

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

Ember 可以做到这一点吗?

我尝试在我的 UsersRouter 中声明一个新的 templateName,但无济于事。

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

但它似乎没有工作:/

4

1 回答 1

6

您可以在助手{{render}}内部使用来显示不同的布局。if

例如,如果您有一个ApplicationControllerthat hasloginlogoutaction 处理程序,以及一个相应的 `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>

Whereuserguest是对应的模板。

<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.ApplicationRoute

App.ApplicationRoute = Ember.Route.extend({
  renderTemplate: function() {
    var loggedIn = false;
    if (loggedIn) {
      this.render('user');
    } else {
      this.render('guest');
    }
  }
});
于 2013-06-25T06:54:25.443 回答