Auf meiner Client-Seite zeige ich eine Liste von Benutzern und ein kleines Diagramm für die Punkte jedes Benutzers an, die in der Datenbank gespeichert sind (mit Hilfe des jQuery-Plugins namens Sparklines).
Das Zeichnen des Diagramms erfolgt mit der Template.rendered-Methode
%Vor%Jetzt habe ich eine Meteor-Methode auf der Serverseite, die regelmäßig aufgerufen wird, um die Benutzerpunkte zu aktualisieren.
%Vor%Jetzt möchte ich, dass das Diagramm automatisch aktualisiert wird, wenn die Meteor-Methode aufgerufen wird. Ich habe eine Methode auf der Vorlage, die geht und diese Meteor-Methode aufruft.
%Vor%Wie verwandle ich diesen Code in einen "reaktiven" Code?
Sie müssen reactive data source
( Sitzung , ReactiveVar ) zusammen mit Tracker .
Unterschied zwischen diesen Implementierungen:
Eine ReactiveVar ähnelt einer Session-Variablen mit einigen wenigen Unterschiede:
ReactiveVars haben keine globalen Namen wie "foo" in Session.get ("foo"). Stattdessen können sie lokal erstellt und verwendet werden, z Beispiel an eine Vorlageninstanz angehängt, wie in: this.foo.get ().
ReactiveVars werden nicht automatisch über Hot-Code-Pushs migriert, während Session-Status ist.
ReactiveVars kann einen beliebigen Wert enthalten, während Session-Variablen begrenzt sind zu JSON oder EJSON.
Deps ist veraltet, kann aber weiterhin verwendet werden.
Die am leichtesten skalierbare Lösung besteht darin, die Daten in einer lokalen Sammlung zu speichern. Durch die Übergabe eines Null-Namens wird die Sammlung Seien Sie sowohl örtlich als auch in der Sitzung und so können Sie setzen, was Sie darin wollen und noch alle Vorteile der Reaktivität erreichen. Wenn Sie die Ergebnisse von getUserPoints
in diese Sammlung hochladen, können Sie einfach einen Helfer schreiben, um den entsprechenden Wert für jeden Benutzer zu erhalten, und dieser wird automatisch aktualisiert.
Es gibt eine alternative Möglichkeit, das Tracker -Paket (früher Deps) zu verwenden, das hier schnell implementiert werden würde, aber fummelig skalieren. Im Wesentlichen können Sie ein neues Tracker.Dependency
einrichten, um Änderungen an Benutzerpunkten zu verfolgen:
Fügen Sie dann einfach einen Dummy-Helper zu Ihrer listItem-Vorlage hinzu (d. h. einen Helfer, der nichts vom Design zurückgibt):
%Vor% Obwohl dies nichts zurückgibt, wird die Vorlage neu gerendert, wenn pointsDep.changed()
aufgerufen wird (dies ist der Fall, wenn neue Benutzerpunktdaten empfangen werden).
Tags und Links javascript meteor