В чем разница между маршрутом и ресурсом в API New Router?

Я пытаюсь понять разницу между Route и a Resource. То, как я понимаю Resource, позволяет установить дополнительные пути объекта Route к другому объекту Route. Но его непонятно, когда я думаю, что отображение имен по умолчанию происходит и для путей.

Ответ 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.