0

我有一个Templatenamed 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(),依赖Template.movies.movies()数据的 HTML 组件不会被新的查询结果更新。

我将如何实现这种行为?

4

1 回答 1

2

最简单的方法是制作一个两个助手都使用的 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"]]});
};

这将按您的预期做出反应。

于 2012-09-30T23:45:47.010 回答