Примечание: Весь исходный код можно найти здесь:Meteor: Как подписаться/показать имена пользователей, когда this.userId опубликована
https://github.com/Julian-Th/crowducate-platform/
Я следующие функции паба:
Meteor.publish('editableCourses', function() {
return Courses.find({"canEditCourse": { $in: [ this.userId ] } });
});
Meteor.publish("userData", function() {
if (this.userId) {
return Meteor.users.find({_id: this.userId},
{fields: {'realname': 1, 'username': 1, 'gender': 1, 'language': 1, 'biography': 1 }})
}
});
Meteor.publish("allUsernamesExceptCurrent", function() {
// Get current user
var currentUserId = this.userId;
// Get all users except current,
// only get username field
var users = Meteor.users.find(
{_id: {$ne: currentUserId}},
{fields: {username: 1}}
);
return users;
});
Вот шаблон:
<template name="myTeachingCourses">
<button class="btn btn-primary js-create-course"><i class="fa fa-plus"></i> Create a Course</button>
<hr>
<div class="row">
<ul class="thumbnails list-unstyled">
{{#each courses}}
{{>courseCard}}
{{/each}}
</ul>
</div>
</template>
Помощник с подпиской:
Template.myTeachingCourses.helpers({
'courses': function(){
return Courses.find();
}
});
Template.myTeachingCourses.created = function() {
// Get reference to template instance
var instance = this;
// Subscribe to all published courses
instance.subscribe("editableCourses");
};
Проблема: шаблон не отображает созданные курсы. Создатель курса не может видеть свои собственные курсы или добавлять других сотрудников. Интересно, может ли быть причина, потому что canEditCourse теперь представляет собой массив с именами пользователей, а не с идентификаторами.
My JSON for Courses:
{
"_id" : "hRX8YABpubfZ4mps8",
"title" : "Course Title here",
"coverImageId" : "Qojwbi2hcP2KqsHEA",
"author" : "Name",
"keywords" : [
"test",
"meteor"
],
"published" : "true",
"about" : "Testing",
"canEditCourse" : [
"User1"
],
"createdById" : "zBn6vtufK2DgrHkxG",
"dateCreated" : ISODate("2015-12-29T21:42:46.936Z")
}
Via this вопрос, который я узнал, что хранение имен пользователей в массиве не является хорошей идеей, сейчас очевидным причинам. Вначале я фактически хранил идентификаторы вместо имен пользователей, но затем менял их, потому что использовать имя пользователя для автозаполнения с помощью typeahead и рендеринг идентификаторов всех соавторов нехорошо. Каков наилучший способ исправить это? Другими словами, как можно сделать все созданные курсы.
Я предлагаю вам приобрести пакет MeteorToys (бесплатная версия в порядке). используйте CTRL + M, чтобы просмотреть ваши данные в браузере. Это облегчает отладку жизни. – MrE