【发布时间】:2017-01-22 06:04:46
【问题描述】:
我正在做一个列表/任务应用程序,我可以选择向我显示好任务的列表,使用会话存储我正在单击的列表。 使用 Meteor 任务板教程,我可以计算我拥有的项目。 问题是计数系统与所有列表无关,而仅与我所在的列表相关。
我不明白如何计算每个列表的项目,并在每个列表项目的前面显示计数器。 在教程中,计数器在会话中,所以我必须在集合中创建一个新的“计数器”,还是我可以保留会话?
一些代码: List.js
if (Meteor.isServer) {
Meteor.publish('lists', function listsPublication() {
return Lists.find({
$or: [
{private: { $ne: true}},
{owner: this.userId},
],
});
});
}
Meteor.methods({
Template.list.helpers({
incompleteCount() {
return Tasks.find({ listId: Session.get('listId'), checked: { $ne: true } }).count();
},
Template.list.events({
'click .list-selected' (event) {
event.preventDefault();
var list = $(event.currentTarget).attr('list-id');
Session.set('listId', list);
},
正文.js
Template.body.helpers({
tasks() {
const instance = Template.instance();
if (instance.state.get('hideCompleted')) {
return Tasks.find({
listId: Session.get('listId'),
checked: { $ne: true },
}, { sort: Session.get("sort_order") });
}
return Tasks.find({listId: Session.get('listId')}, { sort: Session.get("sort_order")});
},
lists() {
return Lists.find({}, { sort: { createdAt: -1 } });
},
});
提前致谢
【问题讨论】:
-
听起来您需要订阅所有列表,然后在客户端上进行过滤以获取计数。另一种方法是通过聚合或自定义发布来聚合数据,或者只是将最终计数写入单独的聚合集合。
-
嘿,我刚刚编辑了帖子,因为我认为我订阅了所有列表。我不明白如何在客户端上进行过滤这是我正在尝试由助手做的事情..
-
与其拥有一个返回所有列表的帮助器,不如拥有一个帮助器,您可以传入您想要的列表并仅返回该列表。我什至会嵌套我的模板,所以我有一个处理显示单个列表的模板。那是(或者是,除非它被改变)使用 Blaze 的首选方式...为您的组件创建逻辑嵌套模板。这样,反应性就被降级为可能的最小组件。
标签: javascript mongodb session meteor collections