【问题标题】:emberjs (1.0rc1) nested routes but render default child route when at parentemberjs (1.0rc1) 嵌套路由,但在父级时呈现默认子路由
【发布时间】:2013-03-12 15:53:51
【问题描述】:

我有一个 ember 应用,其主页显示两个链接:“登录”和“请求邀请”。

每个链接都转到父 (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 模板。

【问题讨论】:

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


    【解决方案1】:

    您可以显式声明 IndexRoute 并实现 redirect hook:

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

    更新:使用其他名为 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");
      }
    });
    

    【讨论】:

    • 如果我这样做,它不会将索引模板呈现到应用程序出口中。这是一个小提琴——它应该有“登录|请求邀请”链接,但没有。 jsbin.com/isodas/5/edit
    • 查看我的更新和 JS Bin 链接。这有点冗长,但我认为存在名称冲突问题,因为索引可能不应该是资源?
    • 是否可以让“主”路由呈现“sign_in”路由的内容而不transitionTo 替换url?这意味着基本 url (/) 和 sign_in url (/sign_in) 将呈现完全相同的内容。
    猜你喜欢
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2023-02-21
    • 2016-08-21
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多