2016-05-22 5 views
0

Ich habe Meteor.setInterval ein neues Element in meiner Sammlung finden und setzt es dann in einer Sitzung alle 1 Sekunden.Animieren von Änderungen an einer Session-Variable, in einem Intervall in Meteor festgelegt?

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

Ich brauche dies, da es nur den neuesten Eintrag erhält und Überschwemmungen anderer Einträge verhindert, da es nur einmal pro Sekunde ausgelöst wird. Gibt es überhaupt eine Animationsmöglichkeit (sagen wir mal einen Fade-Effekt)? Es ist ein Problem, denn wenn ich in das Intervall animiere, wird es jede Sekunde ein- und ausgeblendet, auch wenn kein neuer Eintrag hinzugefügt wurde.

Ich brauche es nur zu verblassen, wenn der Eintrag ändert. Gibt es vielleicht eine bessere Möglichkeit, den Code auf Meteor-Art neu zu schreiben, damit er einfacher zu animieren ist?

Antwort

-1

Das ist, was ich tat, ziemlich lustige Art und Weise, es zu tun:

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

Dann unter:

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); 

Beachten Sie auch, ich erhielt ein Fehler, wenn ich "hinzugefügt" verwendet habe, musste "addedBefore" verwenden.

0

In der Tat, Sie möchten observeChanges hier anstelle eines Timers verwenden. Meteor überwacht bereits Änderungen an Ihrer Sammlung und löst in diesem Fall ein Ereignis observeChanges aus. Dies könnte das sein, was Sie wollen:

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() }; 
    } 
}); 
+0

Dank Christian Ich werde es versuchen, das einzige Problem ist, ich bin mir nicht sicher, ob es Flut berücksichtigt. Die Datenbank wird von vielen Benutzern schnell aktualisiert werden, so dass ich brauche, um nur einen Eintrag alle paar Sekunden anzuzeigen. Ill versuche, ein Intervall zu der session.get hinzuzufügen, vielleicht –

+2

@LisaS Ich habe eine '_.throttle()' hinzugefügt, um die Aktualisierungsrate zu begrenzen. –

+0

@MichelFloyd Ich habe es heute lustig früher gemacht, was funktioniert hat. Nicht sicher, welcher effizienter ist. Ich setze eine Variable, die jedes Mal, wenn eine Änderung beobachtet wird (".observeChanges"), auf "true" setzen würde, und lege sie in eine session.set. Als nächstes machte ich eine Sitzung.get, um die Truthy in Meteor.setInterval abrufen. Ich stelle es in eine if-Anweisung mit der Database.findOne() Ich schreibe es unter –

Verwandte Themen