Grupr
Grupr

Reputation: 11

Meteor.js Iron Routing :_id dynamic route confusion

I'm currently working my way though "Your Second Meteor Application" and have been enjoying it so far. Everything I have created works but I do not understand why the following works but the code at the end does not.

Template

<template name="list">
  <ul>
    {{#each list}}
      <li><a href="/list/{{_id}}">{{name}}</a></li>
    {{/each}}
  </ul>
</template>

<template name="listPage">
  <h2>Tasks: {{name}}</h2>
</template>

Route

Router.route('/list/:_id', {
  template: 'listPage',
  data: function(){
    var currentList = this.params._id;
    return Lists.findOne({_id: currentList});
  }
});

This is giving the expected results. However, I was curious why the following will not work as it seems to be passing the exact same thing. The only differences with the following are:

Template

<template name="list">
  <ul>
    {{#each list}}
      <li><a href="/list/{{_id}}">{{name}}</a></li>
    {{/each}}
  </ul>
</template>

<template name="listPage">
  <h2>Tasks: {{name}}</h2>
</template>

Route

Router.route('/list/randomParm', {
  template: 'listPage',
  data: function(){
    var currentList = this.params.randomParm;
    return Lists.findOne({_id: currentList});
  }
});

The message I am getting is:

Oops, looks like there's no route on the client or the server for url: "http://localhost:3000/list/TGM9dbRRtspyJy7AR."

Isn't :_id and randomParm holding the same values? An id of list items from the HTML links that are being passed to the routing url and being used to make a mongo call? I don't quite understand how :_id and randomParm are different when I am hitting the same routing URL.

Upvotes: 0

Views: 166

Answers (1)

ZuzEL
ZuzEL

Reputation: 13675

Param shold be with :

So your route will be

Router.route('/list/:randomParm', {

If this param is optional then leave ? after

Router.route('/list/:randomParm?', {

Upvotes: 3

Related Questions