将用户字段添加到Meteor记录中?

时间:2012-11-23 23:31:20

标签: meteor

目前,我的Posts模型有一个title和一个content字段:

的客户机/ client.js:

Meteor.subscribe('all-posts');

Template.posts.posts = function () {
  return Posts.find({});
};

Template.posts.events({
  'click input[type="button"]' : function () {
    var title = document.getElementById('title');
    var content = document.getElementById('content');

    if (title.value === '') {
      alert("Title can't be blank");
    } else if (title.value.length < 5 ) {
      alert("Title is too short!");
    } else {
      Posts.insert({
        title: title.value,
        content: content.value,
        author: userId #this show displays the id of the current user
      });

      title.value = '';
      content.value = '';
    }
  }
});

app.html:

      <!--headder and body-->
      <div class="span4">
        {{#if currentUser}}
          <h1>Posts</h1>
          <label for="title">Title</label>
          <input id="title" type="text" />
          <label for="content">Content</label>
          <textarea id="content" name="" rows="10" cols="30"></textarea>

          <div class="form-actions">
            <input type="button" value="Click" class="btn" />
          </div>
        {{/if}}
      </div>

      <div class="span6">
        {{#each posts}}
          <h3>{{title}}</h3>
          <p>{{content}}</p>
          <p>{{author}}</p>
        {{/each}}
      </div>
    </div>
  </div>
</template>

我尝试添加author字段(已经meteor add accounts-passwordaccounts-login):

author: userId

但它只显示当前登录用户的ID。 我希望它能够显示帖子作者的电子邮件。

如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

我认为您可以通过

收到电子邮件
Meteor.users.findOne(userId).emails[0];

答案 1 :(得分:0)

@danielsvane是正确的,但由于您的Post文档的author字段存储了作者的_id而不是电子邮件地址,因此您需要模板助手才能让模板了解如何获取电子邮件地址。请尝试以下方法:

// html
...
<div class='span6'>
    {{#each posts}}
        {{> postDetail}}
    {{/each}}
</div>
...

<template name="postDetail">
    <h3>{{title}}</h3>
    <p>{{content}}</p>
    <p>{{authorEmail}}</p>
</template>

// javascript
Template.postDetail.helpers({
    // assuming the `author` field is the one storing the userId of the author
    authorEmail: function() { return Meteor.users.findOne(this.author).emails[0]; }
});

如果它总是显示当前用户而不是帖子作者的用户,则问题在于如何在事件处理程序中设置userId变量的值,这不是'你在问题中展示的代码。