适当的方式来。铁中的.findOne():路由器

时间:2014-11-19 04:33:42

标签: meteor iron-router

为什么.findOne()在路由器内部执行时不起作用? 它总是返回undefined。

然而.find()没有任何问题。还通过手动输入条件和._id手动测试.findOne()。

.findOne()不是设计用于在路由器内工作吗?

2 个答案:

答案 0 :(得分:1)

它在我的应用程序中正常工作。我这样实现了它:

Router.map(function() {
    this.route('training', {
        path: '/training/:id',
        data: function() {
            return Trainings.findOne({id: this.params.id});
        },
        notFoundTemplate: 'notFound',
        title: "Training"
    });
});

答案 1 :(得分:0)

它工作正常! 也许你正试图将结果传递给迭代器?它不是游标。 尝试使用find()。fetch()并以相同的方式使用结果。

如果它是数据/时间问题,您也可以使用ready()函数进行保护。 如果你反应性地使用它,你就不需要了,但这会让你在事情发生时更明确地知道,但不使用waitOn。

在coffeescript中:

  #---------routes ---------
  @route 'routeName',
    path: '/path/to/:cname'
    onBeforeAction: ->
      Meteor.subscribe('Things', {
        cname: @params.cname
      })
      this.next()

    data: ->
      if @ready()
        data = {
          params: @params
        }
        data.lesson = Things.findOne({cname: @params.cname})
        return data