我正在尝试淡化用户发布的评论的{{#each}}中的新元素。

我在一个非常简单的注释部分的https://gist.github.com/3119147中有一个代码示例(不包括textarea和新的注释插入代码,但这是非常简单的示例。)。包含的是我提供.comment.fresh { opacity: 0; }的CSS片段,然后在我的脚本中有:

Template.individual_comment.postedago_str = function() {
  var id = this._id;
  Meteor.defer(function() {
    $('#commentid_'+id+'.fresh').animate({'opacity':'1'}, function() {
      $(this).removeClass('fresh');
    });
  });
  return new Date(this.time).toString();
};


这似乎是执行动画的可怕地方。我的想法是,每次渲染新注释时,都需要调用我的所有Template.individual_comment.*函数,因此这就是我的动画不适应其中一个的原因。但是,每次插入不同的集合(喜欢)时,Meteor都会调用Template.individual_comment.postedago_str()。这意味着我单击了“赞”按钮,并且我的整个注释列表都闪烁白色并逐渐消失(非常烦人!)。

我阅读了Meteor文档,并试图找出如何更好地分割我的模板,以便仅更新块,并在似乎合理的所有地方添加了id =“”属性。有人知道发生了什么吗?

TIA!

最佳答案

解决方法是,您可以在单个注释的{{if}}类周围包裹一个fresh块,这将检查注释的创建时间,并且仅在注释实际上是最新的时才添加fresh类。就像是:

<div class="comment{{#if isActuallyFresh}} fresh{{/if}}" id="commentid_{{_id}}">


然后定义isActuallyFresh函数:

Template.individual_comment.isActuallyFresh = function() {
  if ((new Date().getTime() - this.time) < 300000) // less than 5 minutes old
     return true;
  else
     return false;

10-06 06:50