0

我卸载了自动订阅并重新启动了流星应用程序。从那时起,我就无法在客户端访问我的收藏数据。

每个与空数组返回相关的问题都给出了相同的答案:订阅的数据尚不可用。但无论我等多久,我都看不到客户端上的数据。

服务器:

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");
4

1 回答 1

7

我认为你得到了[]因为你在启动时发布数据,当还没有准备好时,让订阅响应。

Tracker.autorun(function(){
   Meteor.subscribe("states", function(){
      console.log(states, states.find(), states.find().fetch());
   });
});

选修的

没有理由在isServer/isClientif 语句中声明集合

由于您从良好做法开始(删除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();
  });
于 2015-03-06T02:29:09.970 回答