router.js 1.3 KB

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