router.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. Router.configure({
  2. layoutTemplate: 'layout',
  3. loadingTemplate: 'loading',
  4. notFoundTemplate: 'notFound',
  5. waitOn: function () {
  6. return [
  7. Meteor.subscribe('posts'),
  8. Meteor.subscribe('notifications')
  9. ];
  10. }
  11. });
  12. // C'est un nom de route, pas un nom de template. Mais IR le prend comme nom de
  13. // template par défaut.
  14. Router.route('/', {
  15. name: 'postsList'
  16. });
  17. Router.route('/posts/:_id', {
  18. name: 'postPage',
  19. waitOn: function () {
  20. return Meteor.subscribe('comments', this.params._id);
  21. },
  22. data: function () {
  23. // "this" is the matched route.
  24. return Posts.findOne(this.params._id);
  25. }
  26. });
  27. Router.route('/posts/:_id/edit', {
  28. name: 'postEdit',
  29. data: function () {
  30. // "this" is the matched route.
  31. return Posts.findOne(this.params._id);
  32. }
  33. });
  34. Router.route('/submit', {
  35. name: 'postSubmit'
  36. });
  37. var requireLogin = function () {
  38. if (!Meteor.user()) {
  39. if (Meteor.loggingIn()) {
  40. // Défini dans Router.configure().
  41. this.render(this.loadingTemplate);
  42. } else {
  43. this.render('accessDenied');
  44. }
  45. } else {
  46. this.next();
  47. }
  48. };
  49. // Faire une 404 si la page matche la route postPage, mais pas son argument.
  50. // Déclenché pour toute valeur "falsy" (null, false, undefined, empty).
  51. Router.onBeforeAction('dataNotFound', {
  52. only: 'postPage'
  53. });
  54. // Appliquer le contrôle d'accès à la route postSubmit.
  55. Router.onBeforeAction(requireLogin, {
  56. only: 'postSubmit'
  57. });