[编辑]我正在使用Meteor
大家好,
我搜索并尝试过很多东西,但我不能做我想要的。 我正在做一个ToDo列表的教程,当你检查一个任务时,我想把检查任务的用户的名字。
<template name="task">
<li class="{{#if checked}}checked{{/if}}">{{#if checked}}<!-- the name of the user who checked it -->{{/if}}
<!-- the rest isn't useful for my question -->
我尝试使用{{currentUser.username}},但当我与其他人登录时,名称会更改...
事件处理程序的JS是
'click .toggle-checked'() {
// Set the checked property to the opposite of its current value
Meteor.call('tasks.setChecked', this._id, !this.checked);
}
方法调用的JS
'tasks.setChecked'(taskId, setChecked) {
check(taskId, String);
check(setChecked, Boolean);
Tasks.update(taskId, { $set: { checked: setChecked } });
}
感谢您的帮助
答案 0 :(得分:1)
如果您使用{{currentUser.username}}
,您将始终拥有登录用户的数据。
要获得您想要的内容,您需要注册在您的方法中检查任务的用户的_id
:
'tasks.setChecked'(taskId, setChecked) {
check(taskId, String);
check(setChecked, Boolean);
// Check that 'setChecked' is true and that the user is logged in,
// Otherwise just update the status
if (setChecked && this.userId) {
Tasks.update(taskId, {
$set: {
checked: setChecked,
userId: this.userId,
}
});
} else {
Tasks.update(taskId, {
$set: {
checked: setChecked,
}
});
}
}
如果您使用的是架构,请确保相应地更新架构。
然后在您的模板中,检索用户数据并显示它:
// file task.js
import './task.html';
Template.task.helpers({
checkerUser() {
// The template data are those of the current task, check if userId is defined and task is checked
const { userId, checked } = Template.currentData();
/* Or you can do
* const userId = Template.currentData().userId;
* checked = Template.currentData().checked;
*/
if (userId && checked) {
return Meteor.users.findOne({ _id: userId }).profile.username;
}
return null;
}
});
Template.task.events({
'click .toggle-checked'() {
// Set the checked property to the opposite of its current value
Meteor.call('tasks.setChecked', this._id, !this.checked);
}
})
最后是HTML:
// file task.html
<template name="task">
<li class="{{#if checked}}checked{{/if}}">
{{#if checkerUser}}Completed by {{checkerUser}}{{/if}}
</li>
</template>
从技术上讲,在您的方法中,您还应该检查更多不同情况。例如,当您取消选中任务时,它应该从记录中删除userId
,这样如果非登录用户再次检查它,该名称将不是第一个用户的名称(或者您可以如果用户在设置$unset
)
checked = true
userId