Requête de collection réactive dans un modèle
-
11-12-2019 - |
Question
j'ai un Template
nommé movies
, qui possède une méthode qui renvoie une liste d'objets d'une collection.La requête permettant de générer cette liste d'objets est créée dynamiquement à l'aide des données d'une autre méthode de modèle.
Je voudrais restituer le modèle, ou simplement les composants associés à cette méthode de modèle spécifique, chaque fois que les données du filtre changent.
Voici les deux méthodes utilisées :
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"]]});
};
Côté HTML c'est simple {{#each movies}}{{> movie}}{{/each}}
pour montrer les résultats de movies
méthode.
Le problème est-ce quand Session.get("filter")
change et donc aussi Template.movies.filter()
, le composant HTML s'appuyant sur Template.movies.movies()
les données ne seront pas mises à jour avec les nouveaux résultats de la requête.
Comment pourrais-je obtenir ce comportement?
La solution
Le moyen le plus simple consiste simplement à créer une fonction javascript que les deux assistants utilisent :
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"]]});
};
Cela réagira comme prévu.