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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top