即使删除自动发布,Meteor也会发布

即使删除自动发布,Meteor也会发布,meteor,meteor-publications,Meteor,Meteor Publications,我用的是流星1.0 我有以下代码: /lib/collections.js Members = new Mongo.Collection('members'); /lib/router.js Router.configure({ layoutTemplate: 'layout', loadingTemplate: 'loading', notFoundTemplate: 'notFound', waitOn: function() { return Meteor

我用的是流星1.0

我有以下代码:

/lib/collections.js

Members = new Mongo.Collection('members');
/lib/router.js

Router.configure({
    layoutTemplate: 'layout',
    loadingTemplate: 'loading',
    notFoundTemplate: 'notFound',
    waitOn: function() { return Meteor.subscribe('members'); }
});

Router.route('/', {name: 'menu'});
Router.route('/member/new/', {name: 'memberNew'});
Router.route('/member/renew/', {name: 'memberRenewal'});
/server/publications.js

Meteor.publish('members', function() {
    console.log("Publishing....");
    return Members.find();
});
/client/templates/memberList.js

Template.membersList.helpers({
    listMembers: function() {
        return members.find().fetch();    >>>>>> Error line
    }
});
我得到以下错误:

Exception in template helper: ReferenceError: members is not defined
at Object.Template.membersList.helpers.listMembers
(http://meteorvb.dhcp.meraka.csir.co.za:3000/client/templates/membersList.js?
如果我将/client/templates/memberList.js更改为

Template.membersList.helpers({
    listMembers: function() {
        return Members.find().fetch();    
    }
});
一切正常


有人能帮我吗?

我想这只是一个打字错误,你用小写的m而不是大写的m来表示成员

Template.membersList.helpers({
    listMembers: function() {
        return Members.find().fetch();    >>>>>> Error line
    }
});
变量区分大小写,因为members集合已分配给“members”,所以需要在其他地方将其称为“members”

Members = new Mongo.Collection('members');

不清楚你的问题是什么。该错误是由于集合被称为“Members”,大写字母为M,但您已经输入了“Members”。然后你在你的代码中修复了这个问题,它成功了。有什么问题吗?谢谢你的回复-我从W meteor的书中了解到,如果你从meteor中删除autopublish,客户端将无法直接访问“成员”集合,但必须使用订阅“成员”。我理解不正确吗?
members
既是MongoDB中的集合名称,也是Meteor用来确定与服务器上发布的数据同步的客户端集合的名称。但它不是一个JS对象,只是一个名称
Members
是附加了Meteor API的JS对象,允许您在该集合中搜索/插入/删除/etc。实际上,这只是一个内置API和发布/订阅逻辑的MongoDB或MiniMongo集合的包装器。通过删除autopublish,您必须手动发布您的集合,您正在执行此操作。集合的名称为“成员”,因为这是您创建集合时提供的名称。但是,引用该集合的Javascript对象称为Members(Members=new Mongo.collection('Members');)和find()是该对象上的一个方法。为了澄清,JS集合对象可以是服务器上的
Foo
,如果需要,可以是客户端上的
Bar
,如果双方都将
成员
作为集合名称属性提供,则仍将正确同步。但这相当愚蠢,因为您必须记住在服务器上执行
Foo.find()
,在客户端执行
Bar.find()
,这就是为什么没有人会这样做的原因。