Ran*_*all 0 publish-subscribe meteor meteor-collections
我卸载了自动订阅并重新启动了流星应用程序.从那以后,我无法在客户端访问我的收集数据.
与空数组返回相关的每个问题都会得到相同的答案:订阅的数据尚不可用.但无论我等多久,我都看不到客户端上的数据.
服务器:
Meteor.startup(function () {
Meteor.publish("states", function () {
return states.find();
});
});
Run Code Online (Sandbox Code Playgroud)
登录states.find().fetch()服务器会按预期吐出我的状态.
在客户端:
Meteor.subscribe("states", function(){
console.log(states, states.find(), states.find().fetch());
});
Run Code Online (Sandbox Code Playgroud)
states并按states.find()预期返回对象,.fetch()返回一个[].
等待(甚至几分钟)然后states.find().fetch()在浏览器控制台中运行让我[]依旧.
思考?
编辑
集合在isServer/isClient块之外声明(以利用模式).
states = new Meteor.Collection("states");
Run Code Online (Sandbox Code Playgroud)
我认为你得到的[]是因为你在启动时发布了数据,当还没有准备好时,让那个订阅被动反应.
Tracker.autorun(function(){
Meteor.subscribe("states", function(){
console.log(states, states.find(), states.find().fetch());
});
});
Run Code Online (Sandbox Code Playgroud)
可选的
没有理由在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());
});
}
Run Code Online (Sandbox Code Playgroud)
并在 appName/server/publish.js
Meteor.publish("states", function () {
return states.find();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5757 次 |
| 最近记录: |