在Meteor.user字段中保存了对象的id,在模板中调用了id,如何显示对象的数据而不是id?

时间:2016-07-23 17:54:58

标签: javascript jquery arrays meteor

我在列表中有一组名为 Categories 的对象。在我的html中,每个类别对象都是一个列表项,此类别对象中包含其他对象,这些是类别ID,名称和属于该类别的帖子数组。见图。

enter image description here

在每个类别列表项上都有一个用户可以单击的按钮,然后将类别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
      }
    });
    }
});

as you can see, the category ids are being inputed into the user data as an array

每个用户都有一个时间轴,其中显示已保存的类别ID。

<template name="userTimeline">
  {{#if currentUser}}
  <div class="timeline-user">
 <p>{{name}}</p>
  </div>
{{/if}}
</template>

enter image description here

在帮手

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;字段。

enter image description here

我在帮助器中修改了以下内容,即抛出错误:

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>

1 个答案:

答案 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模板的数据上下文userTimelineMeteor.user()对象,因此this.name将成为Meteor.user().name中类别ID的数组