5

私の ember アプリ (1.0.0 製品バージョン) では、次のような URL 構造を持っています。

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

Router のマッピングは次のようになります。

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

ユーザーが [ /itemI want to display a specific post (例: /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 とポッド構造の更新

Mike Grassotti の答えはまだ正しいですが、新しいポッド アプリケーション構造を使用するときに、ember-cli を使用して Ember 2.x でこれを達成する方法についての更新も追加したいと思いました。indexポッドを使用する場合は、目的のポッド内にフォルダーを作成する必要があり、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 に答える