Domanda

Ho un Template denominato moviesGode, che ha un metodo che restituisce un elenco di oggetti da una raccolta. La query per generare tale elenco di oggetti viene creato dinamicamente utilizzando i dati da un altro metodo modello.

Vorrei ri-rendering del modello o solo i componenti associati a quel metodo modello specifico, ogni volta che i dati del filtro cambiano.

Ecco i due metodi utilizzati:

  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"]]});
  };
.

Sul lato HTML è un semplice {{#each movies}}{{> movie}}{{/each}} per mostrare i risultati dal metodo movies.

Il problema è che quando Session.get("filter") cambiano e, pertanto, è quindi generalmente Template.movies.filter(), il componente HTML che si basa sui dati Template.movies.movies() non verrà aggiornato con i nuovi risultati della query.

Come raggiungerei quel comportamento?

È stato utile?

Soluzione

Il modo più semplice è semplicemente creare una funzione JavaScript che entrambi gli aiutano utilizzano:

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"]]});
};
.

Questo reagirà come ti aspetti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top