我卸载了autosubscribe并重新启动了meteor应用程序。从那以后,我无法在客户端访问我的收集数据。
与空数组返回相关的每个问题都会出现相同的答案:订阅的数据尚不可用。但无论我等多久,我都没有在客户端上看到数据。
服务器:
Meteor.startup(function () {
Meteor.publish("states", function () {
return states.find();
});
});
在服务器上记录states.find().fetch()
会按预期吐出我的状态。
在客户端:
Meteor.subscribe("states", function(){
console.log(states, states.find(), states.find().fetch());
});
states
和states.find()
按预期返回对象,.fetch()
返回[]
。
等待(甚至几分钟),然后在浏览器控制台中运行states.find().fetch()
,我仍然可以[]
。
思考?
修改
集合在isServer / isClient块之外声明(以利用模式)。
states = new Meteor.Collection("states");
答案 0 :(得分:7)
我认为你得到的是[]
,因为你是在发布时发布数据,当没有准备就绪时,让那个订阅被动反应。
Tracker.autorun(function(){
Meteor.subscribe("states", function(){
console.log(states, states.find(), states.find().fetch());
});
});
<强> OPTIONAL 强>
没有理由在isServer/isClient
if语句
由于您开始使用Good实践(删除insecure/autopublish
包)
让我们来做。
首先创建文件夹结构。 (查看meteor/structuringyourapp和此SO)。
在appName/lib/collection.js
内放置此代码。
states = new Meteor.Collection("states");
//optional you can place this subscribe inside the appName/client/main.js
if(Meteor.isClient){
Meteor.subscribe("states", function(){
console.log(states, states.find(), states.find().fetch());
});
}
并在appName/server/publish.js
Meteor.publish("states", function () {
return states.find();
});