Обратите внимание, что начиная с 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
Как мы видим из этого примера, ресурс влияет на именование используемых / создаваемых контроллеров, маршрутов и представлений («новый» маршрут рассматривается как подчиненный ресурсу «сообщений»). Цитируйте из первоисточника (я изменил его, потому что это раздражало, как правильно указал Патрик М. в комментариях):
Это означает, что всякий раз, когда вы создаете ресурс, он будет создавать совершенно новое пространство имен. Это пространство имен названо в честь ресурса, и все дочерние маршруты будут вставлены в него.
Обновление: более сложный пример с вложенными ресурсами
Рассмотрим следующий более сложный пример с несколькими вложенными ресурсами:
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
создает совершенно новое пространство имен. Это означает, что результирующие маршруты в этом случае будут следующими. Как видите, Route, Controller и View для ресурса комментариев не имеют префикса с именем родительского маршрута. Это означает, что вложение ресурса в другой ресурс сбрасывает пространство имен (= создает новое пространство имен).
- PostsRoute, PostsController, PostsView
- PostsIndexRoute, PostsIndexController, PostsIndexView
- PostsNewRoute, PostsNewController, PostsNewView
- КомментарииRoute, CommentsController, CommentsView
- КомментарииNewRoute, КомментарииNewController, КомментарииNewView
- AnotherRoute, AnotherController, AnotherView
Это поведение также объясняется в Ember Docs .
That namespace will have an " which [...]
. Что"
значит? Это просто заполнитель для Route | Контроллер | Посмотреть?App.Router.map(function() { this.route("posts", { path: "/" }, function() { this.route("new"); this.route("comments"}, function() { this.route("new"); }); }); this.route("another", { path: "/another" }); });