动画对会话变量的更改,在Meteor的间隔中设置?

时间:2016-05-22 02:17:01

标签: meteor

我让Meteor.setInterval在我的集合中找到一个最近的项目,然后每隔1秒在一个会话中设置它。

Meteor.setInterval(function() {
  var entries = Database.findOne({}, { sort: { date: -1} });
  Session.set('entryName', entries); 
}, 1200);

我需要这个,因为它只获取最新的条目,并防止其他条目泛滥,因为它只会每秒触发一次。有没有动画这个(让我们说添加淡入淡出效果)?这是一个问题,因为如果我对区间进行动画处理,即使没有添加新条目,它也会每秒淡入淡出。

我只需要在条目更改时才需要淡出。是否有更好的方法以Meteor方式重写代码,以便更容易制作动画?

2 个答案:

答案 0 :(得分:0)

确实,您需要在此使用observeChanges而不是计时器。 Meteor已经监控您的集合的更改,并在发生这种情况时触发observeChanges事件。这可能是你想要的:

var throttled = _.throttle(function(){
  Session.set('entryName', fields);
  // do your animations here
},1000);

Database.find({}, {sort: {date: -1}, limit: 1}).observeChanges({
  added: function(id, fields) { throttled() };
  }
});

答案 1 :(得分:-1)

这就是我所做的,非常有趣的方式:

Database.find({}, {sort: {date: -1}, limit: 1}).observeChanges({
  addedBefore: function(id, fields) {
      var isItOn = true
      Session.set('isItTrue', isItOn);     
  }
});

然后在下面:

Meteor.setInterval(function() {
  var isItOn = Session.get('isItTrue');
    if (isItOn === true) {

// Place Animation Here

   var entries = Database.findOne({}, { sort: { date: -1} });      
   Session.set('entryName', entries);
   var isItOn = false;   
   Session.set('isItTrue', isItOn);
  }
}, 1200); 

另请注意,我在使用“添加”时收到错误,必须使用' addedBefore'。