114

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

4

1 に答える 1

101

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

詳細な説明については、この投稿をご覧ください。

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

リソースとルートの変更以来、多くの人々が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

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

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

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

于 2013-02-20T09:35:56.457 に答える