Я пытаюсь понять разницу между Route
и a Resource
. То, как я понимаю Resource
, позволяет установить дополнительные пути объекта Route
к другому объекту Route
. Но его непонятно, когда я думаю, что отображение имен по умолчанию происходит и для путей.
В чем разница между маршрутом и ресурсом в API New Router?
Ответ 1
Обратите внимание: начиная с 1.11.0,
this.route
используется вместоthis.resource
. Источник: http://guides.emberjs.com/v1.11.0/routing/defining-your-routes/ *
Посмотрите на это сообщение для подробного объяснения.
Это краткий обзор этого сообщения (я немного изменил):
С момента перехода на ресурс и маршрута многие люди путают о значении двух и о том, как они влияют на именование. Имеет значение:
- ресурс - вещь (модель)
- маршрут - что-то делать с вещью
Итак, это означает, что маршрутизатор, использующий маршрут и ресурс, может выглядеть так:
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
Как видно из этого примера, ресурс влияет на использование/создание имен контроллеров, маршрутов и представлений ( "новый" маршрут рассматривается как подчиненный ресурсу "posts" ). Процитируйте исходный источник (я его модифицировал, потому что это раздражало, как заметил Патрик М в комментариях):
Это означает, что всякий раз, когда вы создаете ресурс, он создаст совершенно новый Пространство имен. Это пространство имен называется после ресурс и все дочерние маршруты будут вставлены в него.
Обновление: более сложный пример с вложенными ресурсами
Рассмотрим следующий более сложный пример с несколькими вложенными ресурсами:
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
- КомментарииRoute, КомментарииController, CommentsView
- КомментарииNewRoute, КомментарииNewController, CommentsNewView
- AnotherRoute, AnotherController, AnotherView
Это поведение также объясняется в Ember Docs.