0

我在流星 1.7 中工作,我的发布/订阅只返回空数组。文件结构:

-all/
  -shared.js
-client/
  -main.js
-imports/
  -Elsewhere.js
-server/
  -main.js

shared.js:

Chats = new Mongo.Collection('chats')

客户端/main.js:

Template.main.onCreated(()=>{
  Meteor.subscribe('chats')
});

服务器/main.js

Meteor.publish('chats', function(){
  console.log(Chats.find().fetch()) //Shows that I have documents in the collection
  return Chats.find();
});

其他地方.js

Template.Elsewhere.helpers({
  chats(){
    console.log(Chats.find().fetch()) //[]
    return Chats.find().fetch()
  }
})

为什么我没有得到我正在发布的内容?

- - - - - - - - - - - - - - - - - - -新的东西 - - - - - - ----------------------

我现在不确定这是加载顺序问题、反应性问题、发布/订阅问题还是它们的混合问题。我有这个片段

search(collection, where, id, part, callback){
  var result
  if(id){
    console.log(Meteor.users.find().fetch()) //[]
    result = Collections[collection].findOne(id)
  }else{
    result = Collections[collection].find(where ? where : {}, {many:true}).fetch()
  }
  if(result){
    if(callback){
      callback(result)
      return
    }else{
      if(part){
        return result[part]
      }else{
        return result
      }
    }
  }
}

我还注意到此日志的输出发生在我订阅之前。该文件位于 /imports/scripts/tools.js

4

2 回答 2

1

我意识到我没有为我的助手使用响应式数据源,我在调用 tool.search 函数时设置了一个 Session 变量,该函数只运行了一次。

于 2018-07-19T15:06:16.397 回答
1

在自动运行块内订阅“聊天”并检查处理程序是否准备好。然后找到并获取。

this.autorun(() => {
    let handler = Meteor.subscribe('chats');

    if(handler.ready()) {
         console.log(Chats.find().fetch())
    }
  });
于 2018-07-18T17:23:22.540 回答