Meteor 在使用#each生成的列表中的特定点插入文本
我正试图找到一个好的,流星式的方法来处理这个问题 我有一组按日期排序的Mongo文档,可以轻松地显示在列表中:Meteor 在使用#each生成的列表中的特定点插入文本,meteor,Meteor,我正试图找到一个好的,流星式的方法来处理这个问题 我有一组按日期排序的Mongo文档,可以轻松地显示在列表中: {{title}} {{{#每个条目}} {{>条目} {{/每个}} 现在,每当年份发生变化时,我都要输出它,这样我就可以得到如下结果: 2014 文件1 文件2 2013 文件3 文件4 文件5 等等 这是Meteor,我希望列表是被动的。如果新文件到达,则应将其插入列表中的正确位置,并在必要时添加年份 有人能提出一个合理的方法来处理这个问题吗?您可能会使用helper来检查年
{{title}}
{{{#每个条目}}
{{>条目}
{{/每个}}
现在,每当年份发生变化时,我都要输出它,这样我就可以得到如下结果:
2014
文件1
文件2
2013
文件3
文件4
文件5
等等
这是Meteor,我希望列表是被动的。如果新文件到达,则应将其插入列表中的正确位置,并在必要时添加年份
有人能提出一个合理的方法来处理这个问题吗?您可能会使用helper来检查年份是否与上一个记录中的年份相同,如果不相同,他会输出它,比如
<template name="Entry">
{{year}}
{{data}}
</template>
没有必要将其设为全局tho,您可以使用会话来解决它这可能并不正是您在寻找的命名约定,但它会让您了解我将如何解决此问题:
{{#每年}
{{>日志}
{{/每个}}
{{year}
{{{#每个条目}}
{{text}}
{{/每个}}
app.js
if(Meteor.isClient){
//创建用于测试的客户端集合
条目=新的Mongo.Collection(null);
Meteor.startup(函数(){
//以错误的顺序插入一些数据以测试排序
插入({文本:'doc6',日期:新日期('1/3/2013'));
插入({文本:'doc4',日期:新日期('2013年1月1日'));
插入({文本:'doc5',日期:新日期('1/2/2013'));
条目。插入({文本:'doc3',日期:新日期('1/3/2014'));
插入({文本:'doc1',日期:新日期('2014年1月1日'));
条目。插入({文本:'doc2',日期:新日期('1/2/2014'));
});
Template.body.helpers({
年份:函数(){
//返回带有年份字段的唯一排序对象列表
return.chain(Entries.find().fetch())
//拔出日期
.pluck('日期')
//将每个日期转换为一年
.map(函数(日期){return date.getFullYear();})
//按相反的顺序排列年份
.sortBy(函数(年份){返回年份;})
//只查找唯一的值
.uniq(正确)
//'2014'>{年份:'2014'}
.map(函数(年){return{year:year};})
.value();
}
});
Template.logbook.helpers({
条目:函数(){
var年=本年;
var entries=entries.find({},{sort:{date:1}}).fetch();
//仅返回今年的条目列表
返回过滤器(条目,函数(条目){
返回条目.date.getFullYear()==年;
});
}
});
}
你好,大卫。这很好,但它不能很好地发挥流星的反应。如果我插入一个条目,那么整个列表将需要重新绘制。在这一点上,我认为观察集合是一种方法。添加/删除项目时,我可以在需要时标记文档以将其标记为“打印年份”。然后在每个模板中,如果设置了标志,我可以打印年份。使用旧的spark渲染引擎,如果插入任何项目,它会重新显示整个列表,但是blaze做了正确的事情,即使您从帮助器返回非光标。您可以通过控制台登录日志的呈现的
回调来测试这一点。您可以通过将年份反规范化为自己的字段来进一步优化查询。我认为仅仅为了这个而使用观察似乎有些过分,但嘿,这是你的代码。:)
year: function(){
//operations that will return year to some variable, for example year_variable
if(global_variable===undefined){
global_variable=year_variable;
return year_variable;
}
if(global_variable===year_variable) return false;
else return year_variable;
}