我的路由器没有按预期工作

时间:2016-03-22 15:56:30

标签: meteor iron-router meteor-helper

这是路由器代码

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

这是截图模板

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

我在这里叫它

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

当我点击查看屏幕截图网址时,根据我的路由器配置,网址应该是/screenshots/:_id,但我在浏览器中看到的是/screenshots/,但没有_id和页面显示404 - 未找到。

是否可以创建嵌套路由? 因为在我点击执行上述路线的链接之前。我会在这条路上

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

并且这条路线工作正常我可以看到项目_id,是否可以在其中创建另一条路径,例如此路径/item/:_id/screenshots

我将_id存储在Session.get("itemId")中。是否有可能以某种方式在路径的路径中调用它?

我尝试了'/item' + '/screenshots' + '/' + Session.get("itemId")但是没有工作

还是有其他方法可以解决它?

1 个答案:

答案 0 :(得分:1)

问题不在于问题中的代码,404页面正在发生,因为它没有将id传递到路径中,浏览器显示/screenshots/而不是/screenshots/randomId,因为它只是从链接传递。

根据Behrouz的问题和聊天添加:因为值存储在会话中我们可以使用

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

注册一个名为session的全局模板助手,可以使用{{session session_var_name}}调用,并创建如下链接:

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