Route
aとaの違いを理解しようとしていResource
ます。私が理解する方法は、オブジェクトResource
のサブパスRoute
を別のRoute
オブジェクトに設定するのに役立ちます。しかし、パスに対してもデフォルトの名前マッピングが行われていると考えると、それは不明確です。
1 に答える
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" });
});
これにより、次のルートが作成/使用されます。
- PostsRoute、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
はまったく新しい名前空間を作成します。これは、この場合の結果のルートが次のようになることを意味します。ご覧のとおり、コメントリソースのルート、コントローラー、およびビューには、親ルートの名前のプレフィックスが付いていません。つまり、別のリソース内にリソースをネストすると、名前空間がリセットされます(=新しい名前空間が作成されます)。
- PostsRoute、PostsController、PostsView
- PostsIndexRoute、PostsIndexController、PostsIndexView
- PostsNewRoute、PostsNewController、PostsNewView
- CommentsRoute、CommentsController、CommentsView
- CommentsNewRoute、CommentsNewController、CommentsNewView
- AnotherRoute、AnotherController、AnotherView
この動作は、EmberDocsでも説明されています。