Meteor collection 获取 returns 空数组但已订阅
Meteor collection fetch returns empty array but is subscribed
我卸载了自动订阅并重新启动了流星应用程序。从那时起,我就无法在客户端上访问我的 collection 数据。
每个与空数组相关的问题 return 都会得出相同的答案:订阅的数据尚不可用。但是无论我等多久,我都看不到客户端上的数据。
服务器:
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()
return objects 符合预期,.fetch()
return 和 []
。
等待(甚至几分钟),然后在浏览器控制台中 运行 states.find().fetch()
仍然 []
。
想法?
编辑
Collection 在 isServer/isClient 块之外声明(以利用模式)。
states = new Meteor.Collection("states");
我认为你得到 []
因为你在启动时发布数据,当还没有准备好时,让订阅反应。
Tracker.autorun(function(){
Meteor.subscribe("states", function(){
console.log(states, states.find(), states.find().fetch());
});
});
可选
没有理由在 isServer/isClient
if 语句
中声明集合
因为您是从良好实践开始的(删除 insecure/autopublish
包)
让我们继续。
首先创建文件夹结构。 (检查 meteor/structuringyourapp and this 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();
});
我卸载了自动订阅并重新启动了流星应用程序。从那时起,我就无法在客户端上访问我的 collection 数据。
每个与空数组相关的问题 return 都会得出相同的答案:订阅的数据尚不可用。但是无论我等多久,我都看不到客户端上的数据。
服务器:
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()
return objects 符合预期,.fetch()
return 和 []
。
等待(甚至几分钟),然后在浏览器控制台中 运行 states.find().fetch()
仍然 []
。
想法?
编辑
Collection 在 isServer/isClient 块之外声明(以利用模式)。
states = new Meteor.Collection("states");
我认为你得到 []
因为你在启动时发布数据,当还没有准备好时,让订阅反应。
Tracker.autorun(function(){
Meteor.subscribe("states", function(){
console.log(states, states.find(), states.find().fetch());
});
});
可选
没有理由在 isServer/isClient
if 语句
因为您是从良好实践开始的(删除 insecure/autopublish
包)
让我们继续。
首先创建文件夹结构。 (检查 meteor/structuringyourapp and this 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();
});