Meteor集合提取返回空数组但已订阅

时间:2015-03-06 01:00:07

标签: meteor publish-subscribe meteor-collections

我卸载了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());
});

statesstates.find()按预期返回对象,.fetch()返回[]

等待(甚至几分钟),然后在浏览器控制台中运行states.find().fetch(),我仍然可以[]

思考?

修改

集合在isServer / isClient块之外声明(以利用模式)。

states = new Meteor.Collection("states");

1 个答案:

答案 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();
  });