我在列表中有一组名为 Categories 的对象。在我的html中,每个类别对象都是一个列表项,此类别对象中包含其他对象,这些是类别ID,名称和属于该类别的帖子数组。见图。
在每个类别列表项上都有一个用户可以单击的按钮,然后将类别ID保存在名为name的Meteor.user字段中。
<template name="CategoriesMain">
<ul>
{{#each articles}}
<li>
<a href="/catsingle/CategorySingle/{{_id}}"><h2>{{name}}</h2></a>
<button type="button" class="toggle-category">Add to User Field</button>
</li>
{{/each}}
</ul>
</template>
要实现这一目标,我的帮助
Template.CategoriesMain.events({
'click .toggle-category': function(e){
//take the category id on click
var ob = this._id;
//make it into array
var id = $.makeArray( ob );
e.preventDefault();
Meteor.call('addingCategory', id, function(error, user){ console.log(id)});
},
});
然后在我的方法中。
Meteor.methods({
addingCategory: function(name) {
Meteor.users.update({
_id: Meteor.userId()
},
{
$addToSet: {
name: name
}
});
}
});
每个用户都有一个时间轴,其中显示已保存的类别ID。
<template name="userTimeline">
{{#if currentUser}}
<div class="timeline-user">
<p>{{name}}</p>
</div>
{{/if}}
</template>
在帮手
中Template.userTimeline.helpers({
name: function() {
return Meteor.user().name;
//this is what im experiment with to link the category id's in the timeline with the category ids from the Category collection but i'm not sure if im going the right direction.
var name = FlowRouter.getParam('_id')
return CategoryCollection.find({_id: id}).fetch();
}
});
我的问题是,不是显示类别ID,而是可以某种方式获取那些类别ID的对象,即属于该类别的帖子?我知道我必须以某种方式将用户收集的ID与类别
的ID相关联修改
我修改了我的流星方法以声明&#34;类别&#34;像这样的数组:
Accounts.onCreateUser(function(options, user){
user.category = [];
return user;
});
Meteor.methods({
addingCategory: function(category) {
console.log(Meteor.userId());
Meteor.users.update({
_id: Meteor.userId()
},
{
$addToSet: {
category: category
}
});
}
});
这就是Meteor.users的样子,看看&#34;类别&#34;字段。
我在帮助器中修改了以下内容,即抛出错误:
Template.userTimeline.helpers({
category(){
return CategoryCollection.find({ _id: { $in: this.category }}); // a cursor of categories
}
});
其中 CategoryCollection 是包含类别的集合。
因为我宣布&#34;类别&#34;作为我的方法中的数组,我不再像以前那样将每个类别ID更改为数组,所以我将模板事件更改为此。
Template.CategoriesMain.events({
'click .toggle-category': function(e){
var ob = this._id;
console.log(ob);
e.preventDefault();
Meteor.call('addingCategory', ob, function(error, user){ console.log(ob)});
}
});
我的发布已更改为:我不知道我是否应该使用$ in?
Meteor.publish(null, function() {
return Meteor.users.find({_id: this.userId}, {fields: {category: 1}});
});
我的html已更改为:
<template name="userTimeline">
{{#if currentUser}}
<div class="timeline-user">
{{#each category}}
Count: {{count}}
Description: {{description}}
Link: {{link}}
{{#each posts}}
ID: {{id}}
Title: {{title}}
{{/each}}
{{/each}}
</div>
{{/if}}
</template>
答案 0 :(得分:1)
您可以通过迭代类别ID数组并使用帮助程序返回整个类别对象来显示与用户相关的类别。然后在里面,你可以遍历帖子。
<template name="userTimeline">
{{#if currentUser}}
<div class="timeline-user">
{{#each categories}}
Count: {{count}}
Description: {{description}}
Link: {{link}}
{{#each posts}}
ID: {{id}}
Title" {{title}}
{{/each}}
{{/each}
</div>
{{/if}}
</template>
然后是你的助手:
template.userTimeline.helpers({
categories(){
if ( this.category &&
typeof(this.category) === "object" &&
this.category.length ){ // check to see if the list of categories is an array
return categories.find({ _id: { $in: this.category }}); // a cursor of categories
} else {
console.log(this.category);
return null;
}
}
});
请记住,this
模板的数据上下文userTimeline
是Meteor.user()
对象,因此this.name
将成为Meteor.user().name
中类别ID的数组