所以我使用publishComposite在Meteor中进行集合连接。我有一个带有user_id外键的父集合(Subscriptions)。我在Meteor.users集合中查找用户名以获取实际的用户名,但是如何在html模板中实际打印它。我的订阅数据在那里,但我如何实际引用用户名?
以下是发布代码:
Template.adminCourseDetail.helpers({
courseDetail: function(id){
var id = FlowRouter.getParam('id');
return Courses.findOne({ _id: id });
},
courseSubscriptions: function(){
var id = FlowRouter.getParam('id');
return Subscriptions.find({course_id:id})
},
users: function(){
return Meteor.users.find();
}
});
这是模板子文档:
<template name="adminCourseDetail">
<h1>Course Details</h1>
<p>Title: {{courseDetail.title}}</p>
<p>Description: {{courseDetail.description}}</p>
<p>Start Date: {{courseDetail.startDate}}</p>
<p>Number of sessions: {{courseDetail.sessions}}</p>
<p>Duration: {{courseDetail.duration}}</p>
<p>Price: {{courseDetail.price}}</p>
<p>{{userTest}}</p>
<a href="#">edit</a>
<a href="#">delete</a>
<h2>Course Subscriptions</h2>
{{#each courseSubscriptions}}
<div class="row">
<div class="col-md-3">{{username}}</div>
<div class="col-md-3">{{sub_date}}</div>
</div>
{{/each}}
</template>
和模板(垃圾)ps课程详细信息来自一个单独的集合。它更容易,我认为更高效的单独获取细节,这很好。它只是我无法正确显示的用户名:
filename
提前感谢任何建议!
答案 0 :(得分:1)
据我了解您的问题,Subscriptions
集合的文档仅包含属性user_id
,引用Meteor.users
集合中的相应用户文档。如果是这种情况,那么您需要添加一个额外的模板助手,它返回用户名:
Template.adminCourseDetail.helpers({
// ...
getUsername: function() {
if (this.user_id) {
let user = Meteor.users.find({
_id: this.user_id
});
return user && user.username;
}
return "Anonymous";
}
// ...
});
之后,只需将{{username}}
替换为{{getUsername}}
:
<template name="adminCourseDetail">
<!-- ... -->
<h2>Course Subscriptions</h2>
{{#each courseSubscriptions}}
<div class="row">
<div class="col-md-3">{{getUsername}}</div>
<div class="col-md-3">{{sub_date}}</div>
</div>
{{/each}}
<!-- ... -->
</template>
可能你误解了 reywood:publish-composite
包的概念。使用Meteor.publishComposite(...)
只会发布反应式联接,但不会返回一组新的联接数据。
答案 1 :(得分:1)
对于其他有类似问题的人,并查看我的特定示例。在我的情况下,以下代码工作。基于马蒂亚斯&#39;回答:
在模板助手中:
getUsername: function() {
let user = Meteor.users.findOne({
_id: this.user_id
});
return user;
}
然后在模板中:
{{getUsername.username}}
我的每个块都循环遍历从订阅集合返回的游标而不是课程集合,这就是为什么它比Matthias提供的代码更简单。