J'essaie de comprendre la différence entre un Route
et un Resource
. La façon dont je comprends Resource
aide à définir les sous-chemins d'un Route
à un autre Route
Objet. Mais ce n'est pas clair quand je pense que le mappage de noms par défaut se produit également pour les chemins.
Réponse
Trop de publicités?Veuillez noter qu'à partir de la version 1.11.0,
this.route
est uniquement utilisé à la place dethis.resource
. Source : http://guides.emberjs.com/v1.11.0/routing/defining-your-routes/ *
Jetez un coup d'œil à ceci poste pour une explication détaillée.
Ceci est un résumé grossier de ce post (j'ai modifié un peu) :
Depuis le passage aux ressources et à l'itinéraire, beaucoup de gens sont sont confuses quant à la signification de ces deux termes et à leur incidence sur le nommage. Voici la différence :
- ressource - une chose (un modèle)
- route - quelque chose en rapport avec la chose
Cela signifie donc qu'un routeur utilisant une route et une ressource pourrait ressembler à ceci :
App.Router.map(function() {
this.resource("posts", { path: "/" }, function() {
this.route("new", { path: "/new" });
});
this.route("another", { path: "/another" });
});
Ainsi, les routes suivantes seraient créées/utilisées :
- PostsRoute, PostsController, PostsView
- PostsIndexRoute, PostsIndexController, PostsIndexView
- PostsNewRoute, PostsNewController, PostsNewView
- Une autre route, un autre contrôleur, une autre vue.
Comme nous le voyons dans cet exemple, la ressource affecte le nom des contrôleurs, des routes et des vues utilisés/créés (la route "new" est traitée comme subordonnée à la ressource "posts"). Citation de la source originale (je l'ai modifiée, car elle était irritante comme Patrick M l'a correctement souligné dans les commentaires) :
Cela signifie qu'à chaque fois que vous créez une ressource, un tout nouveau fichier espace de noms. Cet espace de nom est nommé d'après la et toutes les routes enfants y seront insérées.
Mise à jour : exemple plus complexe avec des ressources imbriquées
Considérons l'exemple suivant, plus complexe, avec plusieurs ressources imbriquées :
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" });
});
Dans ce cas, la ressource comments
crée un tout nouvel espace de nom. Cela signifie que les routes résultantes dans ce cas seront les suivantes. Comme vous pouvez le constater, la route, le contrôleur et la vue de la ressource "comments" ne sont pas préfixés par le nom de la route parente. Cela signifie que l'imbrication d'une ressource dans une autre ressource réinitialise l'espace de nom (= crée un nouvel espace de nom).
- PostsRoute, PostsController, PostsView
- PostsIndexRoute, PostsIndexController, PostsIndexView
- PostsNewRoute, PostsNewController, PostsNewView
- CommentsRoute, CommentsController, CommentsView
- CommentsNewRoute, CommentsNewController, CommentsNewView
- Une autre route, un autre contrôleur, une autre vue.
Ce comportement est également expliqué dans le Docs Ember .