Frage

Ich habe ein Template genannt movies, das über eine Methode verfügt, die eine Liste von Objekten aus einer Sammlung zurückgibt.Die Abfrage zum Generieren dieser Objektliste wird dynamisch unter Verwendung von Daten aus einer anderen Vorlagenmethode erstellt.

Ich möchte die Vorlage oder nur die mit dieser bestimmten Vorlagenmethode verknüpften Komponenten neu rendern, wenn sich die Filterdaten ändern.

Hier sind die beiden verwendeten Methoden:

  Template.movies.filter = function () {                                             
    if (Session.equals("filter", undefined)) {                                       
      return {};
    }
    return Session.get("filter");                                                    
  };                                                                                 

  Template.movies.movies = function () {                                             
    return Movies.find(Template.movies.filter(), {sort: [["Poster", "desc"]]});
  };

Auf der HTML-Seite ist es einfach {{#each movies}}{{> movie}}{{/each}} um die Ergebnisse aus dem anzuzeigen movies Methode.

Das Problem ist das wann Session.get("filter") ändert sich und tut dies auch Template.movies.filter(), die HTML-Komponente, auf die sich verlässt Template.movies.movies() Die Daten werden nicht mit den neuen Abfrageergebnissen aktualisiert.

Wie würde ich dieses Verhalten erreichen?

War es hilfreich?

Lösung

Der einfachste Weg besteht darin, einfach eine Javascript-Funktion zu erstellen, die beide Helfer nutzen:

var getFilter = function() {
  if (Session.equals("filter", undefined)) {                                       
    return {};
  }
  return Session.get("filter")
}

Template.movies.filter = function() { return getFilter(); }
Template.movies.movies = function () {                                             
  return Movies.find(getFilter(), {sort: [["Poster", "desc"]]});
};

Dies wird wie erwartet reagieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top