Ваш вопрос немного расплывчато, но надеюсь, мой ответ поможет вам.
Я создал решение на meteorpad, чтобы вы могли поиграть с ним, чтобы посмотреть, как он работает.
В main.html
, list
Контент шаблона данных устанавливается по {{#each days}}
, являющимся массивом массивов. Вы перебираете внешний массив в этом внешнем цикле #each
. Внутренний массив представляет собой простой двухэлементный массив, 0-й элемент которого представляет собой строку «сегодня» или «в день» и т. Д., В то время как первый элемент снова представляет собой массив, содержащий объекты, поступающие из базы данных после группировки по дню, и где значение этого объекта item
отображается во внутреннем цикле {{#each this.[1]}}
для каждого элемента за данный день.
// main.html
<body>
{{> list}}
</body>
<template name='list'>
{{#each days}}
{{this.[0]}}
{{#each this.[1]}}
<div>{{item}}</div>
{{/each}}
<br>
{{/each}}
</template>
В /client/app.js
возвращает контексте days
данных путем сопоставления, фильтрации, группировки и отображения снова на документы, поступающие из базы данных, используя прикованных underscore.js
функции.Первый map
устанавливает время до начала данного дня, filter
оставляет во внешнем массиве только те документы, которые находятся после определенной даты, затем вы даете group
по датам, и, наконец, второй map
просто дает вам today
на месте строки по умолчанию и оставляет in a day
, in 2 days
и т.д. строки на месте.
Кроме того, в прилагаемом moment.js
пакете, вы сбрасываете пороги разницы во времени, так что вы измеряете время различия в дни всегда вместо секунд по умолчанию, минуты, часы и т.д.
// client/app.js
moment.relativeTimeThreshold('h', 0);
moment.relativeTimeThreshold('s', 0);
moment.relativeTimeThreshold('m', 0);
Template.list.helpers({
days: function() {
var ret = _.chain(Days.find().fetch())
.map(function(day) {
return {_id: day._id, dateTime: moment(day.dateTime).startOf('day')._d, item: day.item};
})
.filter(function(day) {
return moment(day.dateTime) >= moment([2015,7,5])
})
.groupBy(function(day) {
return moment(day.dateTime).from([2015, 7, 4]);
})
.map(function(v, k) {return k === "1 days ago" ? ["today", v] : [k, v]})
return ret._wrapped;
}
});
/общие. js создает дескриптор Days
в базе данных days
.
// common.js
Days = new Mongo.Collection("days");
И /server/app.js
просто вводит несколько документов в базу данных, чтобы начать с.
// server/app.js
Meteor.startup(function() {
if (Days.find().count() === 0) {
var entries = [
{
dateTime: new Date('2015-08-04 09:01:01'),
item: "-Zeroth"
},
{
dateTime: new Date('2015-08-05 11:01:01'),
item: "-First"
},
{
dateTime: new Date('2015-08-05 17:02:11'),
item: "-Second"
},
{
dateTime: new Date('2015-08-09 12:11:07'),
item: "-Third"
},
{
dateTime: new Date('2015-08-09 21:23:18'),
item: "-Fourth"
}
];
_.each(entries, function (entry) {
Days.insert({
dateTime: entry.dateTime,
item: entry.item
});
});
}
});
Можете ли вы уточнить, что вы подразумеваете под «отделять документы в днях»? Вы имеете в виду визуально? –
Я хочу разделить результаты на день на более мелкие части результатов. – JulianWels