113 votes

Quelle est la différence entre une route et une ressource dans New Router API ?

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.

101voto

mavilein Points 7979

Veuillez noter qu'à partir de la version 1.11.0, this.route est uniquement utilisé à la place de this.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 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X