注意:整个源代码可以在这里找到:
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现在是一个带有用户名而不是ID的数组。
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")
}
通过this问题,我发现在数组中存储用户名不是一个好主意,因为现在显而易见的原因。在开始时,我实际上存储了ID而不是用户名,但随后更改了它,因为使用自动填充的用户名和typeahead,并且渲染所有协作者的ID并不是一件好事。修复它的最佳方法是什么?换句话说,如何渲染所有创建的课程。
答案 0 :(得分:1)
因此,当您自己回答时,您的课程集合字段canEditCourse
的数组为usernames
,而不是userId
,因此查询不会返回任何内容。