Consulta de coleção reativa em um modelo
-
11-12-2019 - |
Pergunta
eu tenho um Template
nomeado movies
, que possui um método que retorna uma lista de objetos de uma coleção.A consulta para gerar essa lista de objetos é criada dinamicamente usando dados de outro método de modelo.
Gostaria de renderizar novamente o modelo, ou apenas os componentes associados a esse método de modelo específico, sempre que os dados do filtro forem alterados.
Aqui estão os dois métodos usados:
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"]]});
};
No lado HTML é simples {{#each movies}}{{> movie}}{{/each}}
para mostrar os resultados do movies
método.
O problema é que quando Session.get("filter")
muda e, portanto, o mesmo acontece Template.movies.filter()
, o componente HTML que depende de Template.movies.movies()
os dados não serão atualizados com os novos resultados da consulta.
Como eu conseguiria esse comportamento?
Solução
A maneira mais fácil é criar uma função javascript que ambos os ajudantes utilizem:
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"]]});
};
Isso reagirá conforme o esperado.