meteoriron-routermeteor-helper

My router doesn't work as expected


this is the router code

Router.route('screens',  {
  path: '/screenshots/:_id',
  template: 'screens',
  onBeforeAction: function(){
    Session.set( "currentRoute", "screens" );
    Session.set("screenshots", this.params._id);
    this.next();
  }
});

this is the helper for screenshots template

Template.screens.helpers({
    ss: function () {
        var screenshots = Session.get("screenshots");
        return Products.findOne({ _id: screenshots});
    }
});

and am calling it here

<h4><a href="/screenshots/{{_id}}">Click to view the Screenshots</a>

When i click to view the screenshots URL, the URL should be this /screenshots/:_id based on my router configuration, but what i see in the browser is /screenshots/ without the _id and the page shows 404 - NOT FOUND.

Is it possible to create nested routes? because before i click on the link that executes the above route. i will be in this route

Router.route('itemDetails', {
  path: '/item/:_id',
  template: 'itemDetails',
  onBeforeAction: function(){
    Session.set( "currentRoute", "itemDetails" );
    Session.set("itemId", this.params._id);
    this.next();
  }
});

and this route works fine i can see the item _id, is it possible to create another route inside it that has for example this path /item/:_id/screenshots?

I have the _id stored in Session.get("itemId"). Is it possible to call it in the path of the route somehow?

I tried '/item' + '/screenshots' + '/' + Session.get("itemId") but didn't work

or there is other way to solve it?


Solution

  • The problem is not with the code in the question, the 404 page is occurring due to it not being passed an id into the path, the browser says /screenshots/ and not /screenshots/randomId because it is only being passed that from the link.

    As per additions to the question and chat with Behrouz: Because the value is stored in session we can use

    Template.registerHelper('session',function(input){ 
        return Session.get(input); 
    });
    

    to register a global template helper called session which can be called with {{session session_var_name}} and create the link as below:

    <h4><a href="/screenshots/{{session "itemId"}}">Click to view the Screenshots</a>