Mongodb 我的流星订阅没有';更改路线后更新

Mongodb 我的流星订阅没有';更改路线后更新,mongodb,reactjs,meteor,Mongodb,Reactjs,Meteor,我收集了一些问题 我通过FlowRouter将用户从一条路由发送到另一条路由 第一条路线使用问题中的所有文档,但只有一个字段:\u id 第二个路由只需要一个文档,但需要所有字段。 尽管在第二个路由中进行了新订阅,但只有旧的\u id字段可访问(直到用户手动刷新) 第一条路由的组件订阅如下: getMeteorData() { const questionsHandle = Meteor.subscribe('questions') return { questions: Qu

我收集了一些问题

我通过FlowRouter将用户从一条路由发送到另一条路由

第一条路线使用
问题中的所有文档,但只有一个字段:
\u id

第二个路由只需要一个文档,但需要所有字段。

尽管在第二个路由中进行了新订阅,但只有旧的
\u id
字段可访问(直到用户手动刷新)

第一条路由的组件订阅如下:

getMeteorData() {
  const questionsHandle = Meteor.subscribe('questions')

  return {
    questions: Questions.find().fetch()
  }
}
出版物仅发布
\u id
字段:

Meteor.publish('hspUserQuestionsFromPracticeSet', function() {
    return Questions.find({}, {fields: {_id: 1}})
})
路由更改只需使用
FlowRouter.go(newRoute)
(我正在使用一些更新版本的FlowRouter SSR)

第二条路线:

getMeteorData() {

    const questionHandle = Meteor.subscribe('questionById', this.props.questionId)

    return {
        question: Questions.findOne(),
        questionReady: questionHandle.ready()
    }
},
第二份出版物:

Meteor.publish('questionById', function(questionId) {
    return Questions.find({_id: questionId})
})
当路由切换发生时,
questions
中的所有文档都已订阅,因此
questions.findOne()
会从该列表中查找第一个文档。所以我有两个错误的文件,只有一个字段

我该如何解决这个问题?我已尝试取消订阅
组件将卸载
,新出版物中仅包含
this.stop()
,但这不起作用。

我想您正在使用

您的第一个订阅应该具有与第二个订阅相同的就绪状态,以便确保在显示整个列表时加载了它

getMeteorData() {
  const questionsHandle = Meteor.subscribe('questions')
  return {
    ready: questionsHandle.ready(),
    questions: Questions.find().fetch()
  }
}
您忘记了在findOne中精确显示哪个问题

getMeteorData() {
    const questionHandle = Meteor.subscribe('questionById', this.props.questionId)

    return {
        question: Questions.findOne(this.props.questionId),
        questionReady: questionHandle.ready()
    }
},

在渲染之前,您在哪里检查新订阅是否已准备就绪?这无关紧要。它仍然只有一个字段。是的。如果没有其他办法,我想我会加载第一条路径中的每个字段。你还可以检查你的发布是否真的被调用,以及它是否返回文档及其所有字段。这是固定的。实际上,将
this.props.questionId
放在
findOne
中非常有效,我完全忽略了这一点,因为我认为这只会获取正确的问题,但仍然是错误的字段。我不知道它为什么有效,但它确实有效。