1. ホーム
  2. ember.js

[解決済み] New Router APIにおけるルートとリソースの違いは何ですか?

2022-09-15 15:12:59

質問

の違いを理解しようとしています。 RouteResource . 私の理解では Resource のサブパスの設定に役立ちます。 Route オブジェクトのサブパスを別の Route オブジェクトに変換します。しかし、パスに対してもデフォルトのネームマッピングが起きていると考えると腑に落ちません。

どのように解決するのですか?

1.11.0以降にご注意ください。 this.route の代わりに使われるのは this.resource . ソースは http://guides.emberjs.com/v1.11.0/routing/defining-your-routes/ *

これを見てください ポスト をご覧ください。

この投稿の大まかな要約です(少し修正しました)。

リソースとルートへの変更以来、多くの人がこの2つの意味と命名に与える影響について この 2 つの意味と命名への影響について混乱しています。 ここでは、その違いについて説明します。

  • リソース - 物 (モデル)
  • ルート - そのモノに関係するもの

つまり、ルートとリソースを使ったルータは次のようになります。

App.Router.map(function() {
  this.resource("posts", { path: "/" }, function() {
    this.route("new", { path: "/new" });
  });
  this.route("another", { path: "/another" });
});

この場合、以下のようなルートが作成/使用されることになります。

  • PostsRoute、PostsController、PostsView
  • PostsIndexRoute、PostsIndexController、PostsIndexView
  • PostsNewRoute、PostsNewController、PostsNewView
  • AnotherRoute、AnotherController、AnotherView

この例からわかるように、リソースは使用/作成されるコントローラ、ルート、ビューの命名に影響を与えます("new" ルートは "posts" リソースの下位として扱われます)。原典を引用します(コメントでPatrick Mが正しく指摘したように、いらいらするので修正しました)。

これは、リソースを作成するたびに、まったく新しい 名前空間が作成されます。この名前空間は、リソースにちなんで名付けられ と名付けられ、すべての子ルートがそこに挿入されます。

更新: リソースをネストさせたより複雑な例

複数のリソースをネストした、より複雑な次の例について考えてみましょう。

App.Router.map(function() {
  this.resource("posts", { path: "/" }, function() {
    this.route("new", { path: "/new" });
    this.resource("comments", { path: "/comments" }, function() {
      this.route("new", { path: "/new" });
    });
  });
  this.route("another", { path: "/another" });
});

この場合、リソース comments は全く新しい名前空間を作成します。つまり、この場合の結果のルートは次のようになります。 見ての通り、コメントリソースのルート、コントローラ、ビューには親ルートの名前がプレフィックスとして付いていません。 つまり、リソースを別のリソースの中に入れ子にすると、名前空間がリセットされる(=新しい名前空間が作成される)のです。

  • PostsRoute、PostsController、PostsView
  • PostsIndexRoute、PostsIndexController、PostsIndexView
  • PostsNewRoute、PostsNewController、PostsNewView
  • CommentsRoute、CommentsController、CommentsView
  • CommentsNewRoute、CommentsNewController、CommentsNewView
  • AnotherRoute、AnotherController、AnotherView

この挙動は Ember Docs .