【问题标题】:Template can't find my named iron-router route模板找不到我命名的 Iron-router 路由
【发布时间】:2015-02-12 07:08:42
【问题描述】:

在使用 Iron-router 的流星项目中,我的模板中的 pathFor 找不到命名路由。我想我已经遵守了guides 中的语法。

这是空格键代码:

<a href="{{pathFor 'tag.show' _id=this._id }}" class="tag" id="{{title}}">{{title}}</a>

这是铁路由器代码:

Router.route('/tags/:_id', function() {
  this.layout('layout');

  this.render('tags');

  this.render('tagDetail', {
    to: 'topDrawer',
    data: function() {
      return Tags.findOne({
        _id: this.params._id
      });
    }
  });
}, {
  name: 'tag.show'
});

我做错了什么?

编辑:我的控制台中的确切错误是

pathFor couldn't find a route named "tag.show"

编辑 2:为了好玩,我尝试按名称检索另一条更简单的路线:

Router.route('/', function() {
  this.render('home');
}, {
  name: 'home'
});

Router.go('post.show');

我得到一个“未定义”的错误。我没能解决这个问题。

【问题讨论】:

  • 试试{{pathFor 'tag.show' data=this}}
  • 感谢您的建议,但仍然没有骰子!我已经盯着这个看了很久,我确实觉得它一定很明显。
  • 该错误似乎表明该路由未正确声明。如果您直接导航到它会发生什么?
  • @DavidWeldon 我收到一个错误(在遵循 cwohlman 的回答之后),说客户端或服务器上没有匹配的路由。我使用流星 mongo 控制台获取了一个 _id 以在 URL 中使用。

标签: meteor iron-router


【解决方案1】:

我认为你的声明倒退了,试试:

Router.route('tag.show', function() {
  this.layout('layout');

  this.render('tags');

  this.render('tagDetail', {
    to: 'topDrawer',
    data: function() {
      return Tags.findOne({
        _id: this.params._id
      });
    }
  });
}, {
  path: '/tags/:_id'
})

顺便说一下,这可能是由于 Iron 路由器 api 的变化引起的。我使用的版本是 0.9.4,这就是我在该版本中声明路由的方式:

this.route('home', {path: '/'});

然后我在其他地方定义了一个自定义控制器:

HomeController = RouteController.extend({
  // nothing yet
});

【讨论】:

  • 根据this section,他似乎做得对,但谁知道呢?!我不记得 IR 文档实际匹配代码的时间。
  • cwohlman 的建议是我认为的进步。 IR 现在可以找到一条路线而不会引发任何错误,但在空格键中,每个 href 标签现在都链接到“/tag.show”。我想知道我是否没有正确设置路径或参数?我对Javascript相对缺乏经验。会不会是 :_id 没有定义?
猜你喜欢
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-28
  • 2015-12-16
  • 2017-03-05
  • 2014-04-08
相关资源
最近更新 更多