Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor 在使用#each生成的列表中的特定点插入文本_Meteor - Fatal编程技术网

Meteor 在使用#each生成的列表中的特定点插入文本

Meteor 在使用#each生成的列表中的特定点插入文本,meteor,Meteor,我正试图找到一个好的,流星式的方法来处理这个问题 我有一组按日期排序的Mongo文档,可以轻松地显示在列表中: {{title}} {{{#每个条目}} {{>条目} {{/每个}} 现在,每当年份发生变化时,我都要输出它,这样我就可以得到如下结果: 2014 文件1 文件2 2013 文件3 文件4 文件5 等等 这是Meteor,我希望列表是被动的。如果新文件到达,则应将其插入列表中的正确位置,并在必要时添加年份 有人能提出一个合理的方法来处理这个问题吗?您可能会使用helper来检查年

我正试图找到一个好的,流星式的方法来处理这个问题

我有一组按日期排序的Mongo文档,可以轻松地显示在列表中:


{{title}}
{{{#每个条目}}
{{>条目}
{{/每个}}
现在,每当年份发生变化时,我都要输出它,这样我就可以得到如下结果:

2014 文件1

文件2

2013 文件3

文件4

文件5

等等

这是Meteor,我希望列表是被动的。如果新文件到达,则应将其插入列表中的正确位置,并在必要时添加年份


有人能提出一个合理的方法来处理这个问题吗?

您可能会使用helper来检查年份是否与上一个记录中的年份相同,如果不相同,他会输出它,比如

<template name="Entry">
   {{year}}
   {{data}}
</template>

没有必要将其设为全局tho,您可以使用会话来解决它

这可能并不正是您在寻找的命名约定,但它会让您了解我将如何解决此问题:

  • 创建唯一年份的列表
  • 每年呈现一个模板(日志)
  • 在每个日志中,迭代该年的所有条目
  • 以下是一个完整的工作解决方案:

    app.html
    
    {{#每年}
    {{>日志}
    {{/每个}}
    {{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;
    }