我正在尝试淡化用户发布的评论的{{#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;