5

在我的 ember 应用程序(1.0.0 生产版本)中,我的 URL 结构如下:

/item
/item/{specific-item-name-defined-in-routes}

路由器映射看起来有点像这样:

App.Router.map(function () {
    this.resource("item", function () { 
        this.resource("my-first-item");
        this.resource("another-item");
        ...
    });
});

如果用户导航到/item我想显示一个特定的帖子(例如/item/my-first-item)。我可以通过使用redirect路线的方法来做到这一点:

App.ItemRoute = Ember.Route.extend({
    redirect: function () {
        this.transitionTo('my-first-item');
    }
});

不幸的是,如果我在地址栏中手动输入 URL/item/another-item或直接导航到/item/another-item应用程序,则使用这种方法会将我重定向到/item/my-first-item. 如果我只是在嵌套路由之间进行更改(即通过单击应用程序中的链接,它会正确加载)。

仅当未提供嵌套路由时,如何才能使重定向工作?

4

3 回答 3

10

将重定向挂钩添加到(自动生成的)ItemIndexRoute,而不是重定向项目路由:

App.ItemIndexRoute = Ember.Route.extend({
  redirect: function () {
    this.transitionTo('my-first-item');
  }
});
于 2013-09-09T00:58:40.707 回答
4

ember-cli 和 pods 结构的更新

Mike Grassotti 的回答仍然是正确的,但我还想添加一个关于如何在 Ember 2.x 中使用新的 pod 应用程序结构时使用 ember-cli 实现这一点的更新。使用 pod 时,您需要index在所需的 pod 内创建一个文件夹,然后您可以route.js在该索引文件夹中放置一个文件,以便解析器可以找到它。

示例目录/文件结构

 pods
  ├─ application
  │   ├─ route.js
  │   ├─ controller.js
  │   └─ template.hbs
  └─ item
      ├─ index
      │    └─ route.js
      ├─ my-first-item
      │    ├─ route.js
      │    ├─ controller.js
      │    └─ template.hbs
      └── another-item
           ├─ route.js
           ├─ controller.js
           └─ template.hbs

示例 route.js

上面的pods/item/index/route.js文件将类似于:

import Ember from 'ember';

var ItemIndexRoute = Ember.Route.extend({
  redirect: function() {
    this.transitionTo('my-first-item');
  }
});

export default ItemIndexRoute;
于 2015-09-10T16:52:35.413 回答
0

仅供参考,根据Ember 2.6的官方文档

像这样的嵌套路由器:

app/router.js

Router.map(function() {
  this.route('posts', function() {
    this.route('favorites');
  });
});

相当于:

app/router.js

Router.map(function(){
  this.route('index', { path: '/' });
  this.route('posts', function() {
    this.route('index', { path: '/' });
    this.route('favorites');
  });
});
于 2016-09-16T06:46:33.913 回答