我正在使用流星1.7,而我的发布/订阅仅返回空数组。 文件结构:
-all/
-shared.js
-client/
-main.js
-imports/
-Elsewhere.js
-server/
-main.js
shared.js:
Chats = new Mongo.Collection('chats')
client / main.js:
Template.main.onCreated(()=>{
Meteor.subscribe('chats')
});
server / main.js
Meteor.publish('chats', function(){
console.log(Chats.find().fetch()) //Shows that I have documents in the collection
return Chats.find();
});
Elsewhere.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
答案 0 :(得分:1)
在自动运行块中,订阅“聊天”并检查处理程序是否准备就绪。然后找到并获取。
this.autorun(() => {
let handler = Meteor.subscribe('chats');
if(handler.ready()) {
console.log(Chats.find().fetch())
}
});
答案 1 :(得分:1)
我意识到我没有在助手中使用反应式数据源,而是在调用tool.search函数时设置了一个Session变量,该函数只运行一次。