2013-03-12 75 views
4

我有一个主页显示两个链接:'登录'和'请求邀请'的烬应用程序。emberjs(1.0rc1)嵌套路由,但呈现默认子路由在父母

每条链接转到父路由(index)下的嵌套路由,并呈现到index路由的{{outlet}}中。这是工作,像这样:

  • /:渲染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模板。

回答

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"); 
    } 
}); 
+0

如果我这样做,它不会呈现将索引模板导入应用程序插座。这里有一个小提琴 - 它应该有“登录请求邀请”链接,但没有。 http://jsbin.com/isodas/5/edit – bantic 2013-03-12 16:32:45

+0

查看我的更新和JS Bin Link。这有点冗长,但我认为名称冲突问题,因为索引可能不应该是一个资源? – mavilein 2013-03-12 18:39:36

+0

是否有可能让“main”路由呈现“sign_in”路由的内容*而没有* transitionTo'替换url?这意味着基础url('/')和sign_in url('/ sign_in')将呈现完全相同的内容。 – bantic 2013-03-13 00:32:08