Meteor 在Iron中使用.findOne()的正确方法:router

Meteor 在Iron中使用.findOne()的正确方法:router,meteor,iron-router,Meteor,Iron Router,为什么.findOne()在路由器内执行时不工作? 它总是返回未定义的 但是.find()的工作没有任何问题。还通过手动输入条件和.\u id测试了.findOne() .findOne()不是为在路由器内工作而设计的吗?它在我的应用程序中工作正常。我是这样实现的: Router.map(function() { this.route('training', { path: '/training/:id', data: function() {

为什么.findOne()在路由器内执行时不工作? 它总是返回未定义的

但是.find()的工作没有任何问题。还通过手动输入条件和.\u id测试了.findOne()


.findOne()不是为在路由器内工作而设计的吗?

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

Router.map(function() {
    this.route('training', {
        path: '/training/:id',
        data: function() {
            return Trainings.findOne({id: this.params.id});
        },
        notFoundTemplate: 'notFound',
        title: "Training"
    });
});
很好用! 也许你想把结果传给迭代器?它不是光标。 尝试find().fetch()并以相同的方式使用结果

如果是数据/计时问题,您还可以使用ready()函数进行保护。 如果你是反应性地使用它,你不需要这样做,但这会让你在事情发生时有一点更明确的知识,而不需要使用waitOn

在咖啡脚本中:

  #---------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

我看不出有什么理由不应该。你能展示一些代码吗?这可能与旧的“数据尚未到达”问题有关。我知道这是可行的,但如果我想看到路由器本身的数据库结果呢?如果我试图在action:function(){}内查看findOne的结果,出于某种原因,它将返回undefined。但是如果我找到了。find()并尝试查看该数据,它就会工作。为什么呢?