2

そのようなネストされたルートがある場合

App.Router.map(function() {
  this.resource("foo", {path: "/foos"}, function( {
    this.resource("bar", {path: "/:foo_id/bars"}, function() {
      this.resource("bazz", {path: "/:bar_id"});
    });
  });
});

アプリを起動すると、すべての foo オブジェクトを読み込むために FooIndexRoute が必要になります。しかし、一番下のルートで更新すると、FooIndexRoute がロードされないため、FooRoute でモデル フックを複製する必要があります。

この努力を繰り返さざるを得ない URL 構造で間違っていることは何ですか?

4

2 に答える 2

2

fooベース ルート ( ) を使用してモデルのリストをロードし、インデックス ( foo.index) を使用してリストを表示すると、最適に機能することがわかりました。ルートの は最初はビューで満たされるため{{outlet}}、これは利点ですが、ドリルダウンしたいものを選択すると、のアウトレットがルートの情報に切り替えられます。これにより、ネストによって のコントローラーとモデル データが保持されます。foofoo.indexfoobarfoo

application
├── foo
│   ├── bar
│   │   ├── bazz
│   │   └── index
│   └── index
└── index

foo.indexルートにデータをロードすると、ルートに遷移するときにbar、ネスト パスに含まれていないことがわかりfoo.indexます。これは、簡単にアクセスできないことを意味します。

子ルートではthis.modelFor('foo')、ルートのモデルを取得し、fooそれをモデルとして直接使用するか、ルートのコントローラーに追加するために使用できます。

App.FooRoute = Ember.Route.extend({
  model: function() {
    return ['red', 'yellow', 'blue'];
  }
});

// use foo's model as the index's model
App.FooIndexRoute = Ember.Route.extend({
  model: function() {
    return this.modelFor('foo');
  }
});

// this route has its own model, but also include foo's model
App.BarRoute = Ember.Route.extend({
  model: function() {
    return ['bar1', 'bar2', 'bar3'];
  },
  setupController: function(controller, model) {
    this._super(controller, model);
    controller.set('fooModel', this.modelFor('foo'));
  }
});

ネストを示す JSBin は次のとおりです: http://emberjs.jsbin.com/oxAluJI/1/edit

于 2013-11-07T19:00:40.077 に答える
1

インデックス ルートはすべてをキャッチするルートであり、そのリソースにヒットし、デフォルト ルートを定義していない場合にのみヒットします。ルート名自体でモデル フックを定義し、インデックス ルートを破棄する必要があります。

別名

App.FooRoute = Em.Route.extend({
   model: function....
})

インデックス ルートを引き続き存在させたい場合は、インデックス ルートのモデル フックで を使用できますreturn this.modelFor('foo');。そのため、モデルを 2 回取得するなどを避けることができます。

さらに、より深いルートで、それらのモデルが親ルートの単なる子である場合は、modelFor を使用して親モデルを取得し、適切なアイテムを除外します。

jsbin の例が必要な場合はお知らせください。

于 2013-11-06T19:50:27.030 に答える