在 Meteor todo 中关联列表和任务
Associate Lists and Tasks in Meteor todo
我正在构建 Meteor 教程中的待办事项应用程序并继续。我正在构建一些基于任务模型的列表,但我不知道如何加入它们并说当我点击一个列表时,我想要这个列表中的所有任务。
目前,我有 Tasks.js 和:
'tasks.insert'(text, privacy, priority, listId) {
...
Tasks.insert({
text,
listId: listId,
owner: this.userId,
username: Meteor.users.findOne(this.userId).username,
});
},
Body.js
Template.body.events({
'submit .new-task' (event) {
event.preventDefault();
const listId = ???
const target = event.target;
const text = target.text.value;
...
Meteor.call('tasks.insert', text, privacy, priority, listId);
...
},
然后我显示它的地方:
Template.body.helpers({
tasks() {
const instance = Template.instance();
if (instance.state.get('hideCompleted')) {
return Tasks.find({ checked: { $ne: true } }, { sort: Session.get("sort_order") });
}
return Tasks.find({}, { sort: Session.get("sort_order")});
},
lists() {
return Lists.find({}, { sort: { createdAt: -1 } });
},
我的 body.html,我只是分别显示每个项目(列表和任务)。但问题是我不知道如何建立两者之间的关系...
你能帮帮我吗?
非常感谢
我看到您已经在使用 Session。基本上,您将使用一个 Session 变量来跟踪用户选择的列表,然后使用该变量过滤您的任务。
在您正文中显示列表名称的位置,将列表的 ID 添加为 HTML 属性:
{{#each lists}}
<a href='#' class='list-name' data-id='{{this._id}}'>
{{this.name}}
</a>
{{/each}}
添加一个点击列表名称的事件,将其 id 保存到 Session 变量中:
Template.body.events({
'click .list-name' (event) {
event.preventDefault();
Session.set('listId', event.currentTarget.attr('data-id'))
}
})
在您的 tasks
助手中,使用 Session 变量过滤您的查询:
return Tasks.find(
{ listId: Session.get('listId') },
{ sort: Session.get("sort_order") }
);
如果有任何更清楚的地方,请告诉我。
我正在构建 Meteor 教程中的待办事项应用程序并继续。我正在构建一些基于任务模型的列表,但我不知道如何加入它们并说当我点击一个列表时,我想要这个列表中的所有任务。
目前,我有 Tasks.js 和:
'tasks.insert'(text, privacy, priority, listId) {
...
Tasks.insert({
text,
listId: listId,
owner: this.userId,
username: Meteor.users.findOne(this.userId).username,
});
},
Body.js
Template.body.events({
'submit .new-task' (event) {
event.preventDefault();
const listId = ???
const target = event.target;
const text = target.text.value;
...
Meteor.call('tasks.insert', text, privacy, priority, listId);
...
},
然后我显示它的地方:
Template.body.helpers({
tasks() {
const instance = Template.instance();
if (instance.state.get('hideCompleted')) {
return Tasks.find({ checked: { $ne: true } }, { sort: Session.get("sort_order") });
}
return Tasks.find({}, { sort: Session.get("sort_order")});
},
lists() {
return Lists.find({}, { sort: { createdAt: -1 } });
},
我的 body.html,我只是分别显示每个项目(列表和任务)。但问题是我不知道如何建立两者之间的关系...
你能帮帮我吗?
非常感谢
我看到您已经在使用 Session。基本上,您将使用一个 Session 变量来跟踪用户选择的列表,然后使用该变量过滤您的任务。
在您正文中显示列表名称的位置,将列表的 ID 添加为 HTML 属性:
{{#each lists}}
<a href='#' class='list-name' data-id='{{this._id}}'>
{{this.name}}
</a>
{{/each}}
添加一个点击列表名称的事件,将其 id 保存到 Session 变量中:
Template.body.events({
'click .list-name' (event) {
event.preventDefault();
Session.set('listId', event.currentTarget.attr('data-id'))
}
})
在您的 tasks
助手中,使用 Session 变量过滤您的查询:
return Tasks.find(
{ listId: Session.get('listId') },
{ sort: Session.get("sort_order") }
);
如果有任何更清楚的地方,请告诉我。