[英]How to group items from cursor in Meteor?
介紹。 假設我們有Messages
集合。 該集合中的每個文檔都如下所示:
{
createdAt: 1432018583531,
message: 'Hello',
username: 'chuk',
chatId: '82rWv8bv4YbxEiCky'
}
呈現簡單的消息列表很容易:
<template name="messages">
{{#each messages}}
{{> singleMessage}}
{{/each}}
</template>
---
Template.messages.helpers({
messages: function () {
return Messages.find(selector, options);
}
});
輸出可能如下所示:
- @chuk [5月18日上午10:00]:您好
- @geck [5月18日,上午10:01]:嗨
- @geck [5月18日,上午10:01]:您好嗎?
- @chuk [5月18日上午10:02]:好的:-)
- @chuk [5月19日,09:02 PM]:嘿?
題。 如何按日期和作者分組消息? 如何將輸出轉換為如下形式:
五月18
- @chuk,上午10:00
- 你好- @geck,上午10:01
—嗨
- 你好嗎?- @chuk,上午10:02
—很好:-)
五月19
- @chuk,下午09:02
嘿?
思考。 第一個想法是使用.fetch()
並通過迭代所有命令來強制性地對消息進行分組:
<template name="messages">
{{#each dateBlock}}
{{#each messageBlock}}
{{#each}}
{{> singleMessage}}
{{/each}}
{{/each}}
{{/each}}
</template>
---
Template.messages.helpers({
dateBlock: function () {
return makeDateBlocks(Messages.find(selector, options).fetch());
},
messageBlock: function () {
return makeMessageBlocks(this);
}
});
但是我認為這是一種不好的方法,因為.fetch()
會導致每次更改都重新計算所有數據。 增長的列表將根據元素的數量而變慢。
進行此類分組的最佳方法是什么? 嘿,流星? 可能是我們需要根據afterFlush
回調中的數據屬性插入分隔符並通過jQuery為元素賦予特殊的類嗎? 要么?
您可以在find
調用中轉換消息,以在Messages
文檔中添加new_user
和new_date
標志,如果自上一個Messages
以來時間或用戶已更改:
Template.messages.helpers({
messages: function () {
var lastMessage = null;
return Messages.find({chatId: this.chatId}, {sort: {createdAt: -1}, transform: function (messageItem) {
if (!lastMessage || lastMessage.createdAt < messageItem.createdAt.setHours(0,0,0,0))
messageItem.new_date = true;
else if (lastMessage.username !== messageItem.username)
messageItem.new_user = true;
lastMessage = {username: messageItem.username, createdAt: messageItem.createdAt.setHours(0,0,0,0)}
return messageItem;
}});
}
});
然后,在您的模板中:
<template name="messages">
{{#each messages}}
{{#if new_date}}
{{> messageDate}}
{{> userAndTime}}
{{else if new_user}}
{{> userAndTime}}
{{/if}}
{{> singleMessage}}
{{/each}}
</template>
如果這些轉換調用被阻止,則該方法應該起作用。 我找不到證據表明他們沒有這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.