2014-11-26 1 views
0

Я использую Meteor 1.0Метеор издает даже когда autopublish удаляется

У меня есть следующий код:

/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? 

Я удалил autopublish немного, если я изменю /client/templates/memberList.js в читать

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

Все работает.

Может ли кто-нибудь мне помочь?

+0

Непонятно, каков ваш вопрос. Ошибка вызвана тем, что коллекция называется «Members» с капиталом M, но вы поставили «участников». Затем вы исправили это в своем коде, и это сработало. В чем проблема? – tarmes

+0

Спасибо за ответ. Я понял из вашей метеоритной книги, что если вы удалили автоопубликовать из Метеор, чтобы клиент не смог напрямую получить доступ к коллекции «Участники», но должен был использовать участников подписки. Я понимаю это неправильно? –

+0

'members' - это имя коллекции в MongoDB, и имя Meteor использует для определения того, с какой клиентской коллекцией синхронизировать данные, которые вы публикуете на сервере. Но это не объект JS, а просто имя. 'Members' - это объект JS с прикрепленным к нему API Meteor, который позволяет вам искать/вставлять/удалять/etc внутри этой коллекции. На самом деле, это всего лишь обертка вокруг коллекции MongoDB или MiniMongo с API и паб/sub-логикой. – richsilv

ответ

1

Я думаю, что это просто опечатка, в которой вы использовали нижний регистр m вместо верхнего регистра M для членов.

Template.membersList.helpers({ 
    listMembers: function() { 
     return Members.find().fetch(); >>>>>> Error line 
    } 
}); 

Переменные чувствительны к регистру и, поскольку сбор членов был назначен «Члены» Вы должны передать его «члены» в другом месте.

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