Реактивный запрос на сбор данных в шаблоне
-
11-12-2019 - |
Вопрос
У меня есть Template
названный movies
, у которого есть метод, возвращающий список объектов из коллекции.Запрос для генерации этого списка объектов создается динамически с использованием данных из другого шаблонного метода.
Я хотел бы повторно отображать шаблон или только компоненты, связанные с этим конкретным методом шаблона, всякий раз, когда данные фильтра изменяются.
Вот два используемых метода:
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"]]});
};
На стороне HTML это простой {{#each movies}}{{> movie}}{{/each}}
чтобы показать результаты из movies
метод.
Проблема это когда Session.get("filter")
меняется, и, следовательно, то же самое происходит Template.movies.filter()
, HTML-компонент, опирающийся на Template.movies.movies()
данные не будут обновляться с учетом новых результатов запроса.
Как бы я добился такого поведения?
Решение
Самый простой способ - просто создать функцию javascript, которую используют оба помощника:
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"]]});
};
Это отреагирует так, как вы ожидаете.