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

emberjs (1.0rc1) nested routes but render default child route when at parent

本文关键字:路由 默认 0rc1 嵌套 Emberjs      更新时间:2023-09-26

我有一个ember应用程序的主页显示两个链接:'登录'和'请求邀请'。

每条链路都进入父路由(index)下的嵌套路由,呈现为index路由的{{outlet}}。它是这样工作的:

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

这工作得很好,但我想做的是在默认情况下将"登录"模板渲染到index出口。那么上面的第一个项目符号就会变成这样:

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

模板/strong>

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

路线/strong>

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

这是一个包含上述代码的jsbin。

当它第一次加载它不显示index/sign_inindex/request_invite模板。我想显示默认的index/sign_in模板

你可以显式声明IndexRoute并实现重定向钩子:

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

Update: Using other name then index (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");
  }
});