Oui, il y en a absolument. Dans notre application, nous faisons chaque classe de niveau supérieur (terme utilisé vaguement) une classe distincte dans son propre fichier. Nous avons un répertoire appelé "states" où résident ces fichiers. J'ai trouvé cela le rend plus lisible et plus facile à tester.
Par exemple:
// file: states/blog_posts.js
App.BlogPostsState = Ember.Route.extend({
route: '/posts',
/* .... */
});
// file: states/search_results.js
App.SearchResultsState = Ember.Route.extend({
route: '/search',
/* .... */
});
// file: states/router.js
App.Router = Em.Router.extend({
blogPosts: App.BlogPostsState.extend(),
searchResults: App.SearchResultsState.extend(),
/* .... */
});
Je suis pas clair sur ce code est une copie-collé, encore et encore. Typiquement, si je trouve cela qui se passe, j'essaie d'isoler ce code dans un mixin, mais ce n'est pas toujours facile, surtout dans un routeur/statechart. Une chose qui pourrait être relavent, je ne sais pas si vous êtes au courant ou pas, mais les événements voyageront dans la hiérarchie d'état, donc chaque état de feuille ne doit pas nécessairement réimplémenter la même gestion d'événement.
Dans cet exemple, "action" ou "gestionnaire d'événements" appelé "showAlpha" est valide dans les trois états/emplacements de route (alpha, bêta, delta). Cela élimine le besoin de réimplémenter la même chose plusieurs fois.
App.Router = Ember.Router.extend({
showAlpha: Ember.State.transitionTo('alpha'),
alpha: Em.Route.extend({
route: '/alpha'
}),
beta: EM.Route.extend({
route: '/beta'
}),
delta: Ember.Route.extend({
route: '/delta'
})
});
J'espère que cela aide. Je ne suis pas sûr si cela couvre le code que vous copiez-coller encore et encore.
Jetez un oeil à http://stackoverflow.com/a/11637906/65542 – pangratz
Pour le fractionnement, à droite, ce n'est pas un problème. Mais pour la verbosité et le copier-coller, en parcourant notre routeur, je ne vois pas ce type de pattern, car dans chaque route un travail spécifique est fait. Mais peut-être pour les routes simples, il pourrait y avoir une façon conventionnelle de gérer votre cas, qui sous le hodd, basé sur un nom pourrait créer l'itinéraire, et connecter les points de vente appropriés, et ainsi de suite. Pas sûr que ce soit une bonne idée ... –
Iake un coup d'oeil à l'architecture addons briefed ici aussi http://stackoverflow.com/questions/11391333/emberjs-develop-a-component-in-isolation-with-its-own-routing -states-which-can – sabithpocker