0

コレクションからオブジェクトのリストを返すメソッドを持つnamedがTemplateあります。moviesオブジェクトのリストを生成するクエリは、別のテンプレートメソッドからのデータを使用して動的に作成されます。

フィルタデータが変更されるたびに、テンプレート、またはその特定のテンプレートメソッドに関連付けられたコンポーネントのみを再レンダリングしたいと思います。

使用される2つの方法は次のとおりです。

  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()が新しいクエリ結果で更新されないことです。

どうすればその動作を実現できますか?

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 に答える