Meteor 为什么这个集合是空的?(Collection.find()在om服务器上成功运行)

Meteor 为什么这个集合是空的?(Collection.find()在om服务器上成功运行),meteor,Meteor,好的,这就是我得到的。 名为Posts的集合包含内容,我想以Merchs的名称发布它,publish函数中的find()会查找数据,但这些数据不会共享给客户机,因为Merchs始终为空 //共享 Merchs = new Meteor.Collection('merchs'); // Posts has data I want to publish as "Merchs" this.Posts = new Meteor.Collection('posts'); //服务器 Merchs.all

好的,这就是我得到的。 名为Posts的集合包含内容,我想以Merchs的名称发布它,publish函数中的find()会查找数据,但这些数据不会共享给客户机,因为Merchs始终为空

//共享

Merchs = new Meteor.Collection('merchs');
// Posts has data I want to publish as "Merchs"
this.Posts = new Meteor.Collection('posts');
//服务器

Merchs.allow({
  insert: function(userId, doc) {
    return true;
  },
  update: function(userId, doc, fields, modifier) {
    return true;
  },
  remove: function(userId, doc) {
    return true;
  }
});

Meteor.publish('merchs', function(data) {
    return Posts.find();
});
//客户

Deps.autorun( function() {
    Session.get('selectedCategories');
    subs.subscribe('merchs');
});

创建集合时,括号中的名称应为Mongo集合的名称

Merchs = new Meteor.Collection('merchs');
应该是:

Merchs = new Mongo.Collection('Posts');
也就是说,除非您已经在代码中定义了一个Posts变量,但没有显示该变量。如果您已经定义了帖子,并且只想订阅同一个集合,那么您根本不需要这一行:

Merchs = new Meteor.Collection('merchs');
您也不需要allow()方法(您可以使用为POST定义的方法)。您所需要的只是定义的publish()方法

在客户端,您还需要:

Meteor.subscribe('merchs');
还要注意Mongo.Collection的使用,而不是Meteor.Collection,它在Meteor 0.9.1中被重命名


您可能想阅读关于发布/订阅的这个极好的答案:

在共享代码中,
merchs
应该与Mongo中的集合名称相匹配(因此我猜这是
posts
posts
或类似内容。在客户端代码中,我想您需要
Meteor.subscribe('posts'))
或上面的集合名称。Meteor.subscribe('posts')已经定义,并且其中保存了数据。我现在要做的是以不同的名称“Merchs”发布它。在发布功能中,我希望使用不同的名称发布帖子中的数据。但您发布的是“merchs”而不是“Posts”。只需确保上面的共享代码引用要创建Meteor集合的Mongo集合的实际区分大小写的名称即可。(例如,
merchs=new Meteor.collection('Posts'))
。然后您可以在发布函数中执行
返回Merchs.find();
Meteor.subscribe('Merchs')
在客户端上。编辑:不确定是否使用
MeteoHacks:subs manager
更改了其中任何一项,但我认为不会。建议首先确保它与
Meteor.subscribe一起工作。我可以看到,这会起作用。但随后发生的情况是“错误:已定义了名为“/posts/insert”的方法”,因为帖子已经被定义和使用。我已经订阅了,这是个问题。我现在想做的是用另一个名字“Merchs”发布它。在发布功能中,我想发布帖子中的数据,但使用不同的名称。我在许多示例中看到过这种做法,但我无法找出我的不同之处。感谢您通知我们有关新Meteor.collection更改的信息。在阅读stackoverflow帖子后,我现在意识到我做错了什么。