emberjs(1.0rc1)嵌套路由,但在父级时呈现默认子路由

时间:2013-03-12 15:53:52

标签: javascript ember.js url-routing ember-router

我有一个带有主页的余烬应用,其中显示了两个链接:“登录”和“请求邀请”。

每个链接转到父(index)路由下的嵌套路由,呈现为{{outlet}}路由的index。它的工作原理如下:

  • /:将index呈现到应用程序商店
  • /sign_in:呈现索引内容然后将index/sign_in呈现到索引模板的出口
  • /request_invite:呈现索引内容然后将index/request_invite呈现到索引模板的出口

这样做很好,但我想要做的是默认情况下将“登录”模板渲染到index插座中。所以上面的第一个子弹会改变如此:

  • /:将index呈现到{{outlet}} index/sign_in呈现为索引模板的出口

模板

<script type="text/x-handlebars" data-template-name="application">
  <h1>application</h1>
  {{#linkTo "index"}}index{{/linkTo}}
  {{outlet}}
</script>

<script type="text/x-handlebars" data-template-name='index'>
  <h2>index</h2>
  {{#linkTo "index.sign_in"}}Sign in{{/linkTo}}
  |
  {{#linkTo "index.request_invite"}}Request Invite{{/linkTo}}
  {{outlet}}
</script>

<script type="text/x-handlebars" data-template-name='index/sign_in'>
  <h3>index/sign_in</h3>
</script>

<script type="text/x-handlebars" data-template-name='index/request_invite'>
  <h3>index/request_invite</h3>
</script>

路由

App = Ember.Application.create();

App.Router.map(function() {
  this.resource("index", function() {
    this.route("sign_in");
    this.route("request_invite");
  });
});

这是jsbin with the above code

首次加载时,它不会显示index/sign_inindex/request_invite模板。我默认会显示index/sign_in模板。

1 个答案:

答案 0 :(得分:6)

您可以明确声明IndexRoute并实施redirect hook:

App.IndexRoute = Ember.Route.extend({
  redirect : function(){
    this.transitionTo("index.sign_in");
  }
});

更新:使用其他命名的路线然后索引(JS Bin Link

App = Ember.Application.create();

App.Router.map(function() {
  this.resource("main", function() {
    this.route("sign_in");
    this.route("request_invite");
  });
});
App.IndexRoute = Ember.Route.extend({
  redirect : function(){
    this.transitionTo("main");
  }
})
App.MainIndexRoute = Ember.Route.extend({
  redirect : function(){
    this.transitionTo("main.sign_in");
  }
});