1

Meteor を使用して無料の TV 追跡アプリを作成していますが、途中で壁にぶつかったようです。私のテンプレートの一部にはこれが含まれています:

<template name="results">
  <div class="row">
      <div class="span6 offset6">
        <h4>Search Results</h4>
          <ul>
            {{#each series}}
            <li><a href="http://thetvdb.com/?tab=episode&seriesid{{tvdbseriesid}}&lid={{tvdblid}}">{{seriesname}}</li>
            {{/each}}
          </ul>
      </div>
    </div>
</template>

次に、クライアント js コード内で次のようにします。

Template.search.events({
  'click #search' : function(evt) {
    evt.preventDefault();

    var query = $('#query').val();
    if (query) {
      Meteor.call('queryshow', query, function(error, result) {
        Template.results.series = result;
        console.log(Template.results());
      });
    }
  }
});

「queryshow」サーバー メソッドは、テンプレートが必要とするデータを含むオブジェクトを返す単なる Collection クエリ メソッドです。

ただし、問題は次のとおりです。変更がブラウザ ウィンドウに反映されません。以下に示す console.log(Template.results()) 呼び出しは、私が期待している正しいhtmlを返すため、理由がわからないようです。

これを修正するにはどうすればよいですか? Meteor のドキュメントを調べてみましたが、テンプレートを強制的に再レン​​ダリングする関数が見つからないようです。どんな助けでも大歓迎です!

4

1 に答える 1

3

Template.results.series使用するシリーズに直接設定するのではなく、シリーズを返す関数にする必要があります。そうすれば、Meteor が関数を実行してシリーズを取得するときに、関数が依存するものを登録し、依存関係のいずれかが変更されるたびに関数を再実行できます。

情報の依存関係を登録する最も簡単な方法は、Sessionオブジェクトを使用することです。したがって、コードは次のようになります。

Template.results.series = function () { return Session.get('resultsSeries'); }

Meteor.call('queryshow', query, function (err, res) {
  // handle the error if it's there
  // ...
  // Then set the session variable, which will re-run anything that depends on it.
  Session.set('resultsSeries', res)
}
于 2013-06-16T08:22:25.077 に答える