web-dev-qa-db-ja.com

New Router APIのルートとリソースの違いは何ですか?

RouteResourceの違いを理解しようとしています。私がResourceを理解する方法は、Routeオブジェクトのサブパスを別のRouteオブジェクトに設定するのに役立ちます。しかし、デフォルトの名前マッピングがパスに対しても発生すると考えると、それは不明です。

114
thecodejack

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

詳細な説明については、これをご覧ください post .

これはこの投稿の大まかな要約です(少し変更しました):

リソースとルートが変更されて以来、多くの人々はこの2つの意味とネーミングへの影響について混乱しています。違いは次のとおりです。

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

そのため、ルートとリソースを使用するルーターは次のようになります。

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

これにより、次のルートが作成/使用されます。

  • PostsRou​​te、PostsController、PostsView
  • PostsIndexRoute、PostsIndexController、PostsIndexView
  • PostsNewRoute、PostsNewController、PostsNewView
  • AnotherRoute、AnotherController、AnotherView

この例からわかるように、リソースは、使用/作成されるコントローラー、ルート、およびビューの命名に影響します(「新しい」ルートは「投稿」リソースの従属として扱われます)。元のソースから引用(私はそれを修正しました、なぜならパトリック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は新しい名前空間を作成します。つまり、この場合の結果のルートは次のようになります。 ご覧のように、コメントリソースのルート、コントローラー、およびビューには、親ルートの名前がプレフィックスとして追加されていません。つまり、リソースを別のリソース内にネストするとネームスペースがリセットされます。

  • PostsRou​​te、PostsController、PostsView
  • PostsIndexRoute、PostsIndexController、PostsIndexView
  • PostsNewRoute、PostsNewController、PostsNewView
  • CommentsRou​​te、CommentsController、CommentsView
  • CommentsNewRoute、CommentsNewController、CommentsNewView
  • AnotherRoute、AnotherController、AnotherView

この動作は Ember Docs でも説明されています。

102
mavilein