目前,我的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-password
和accounts-login
):
author: userId
但它只显示当前登录用户的ID。 我希望它能够显示帖子作者的电子邮件。
如何实现这一目标?
答案 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
变量的值,这不是'你在问题中展示的代码。