2013-06-16 4 views
1

Я создаю бесплатное приложение для отслеживания ТВ с помощью Meteor, и по пути я, кажется, ударил стену. Часть моего шаблона содержит следующее:Шаблон Meteor.js не обновляется после назначения переменной

<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> 

Затем, в течение моего клиент расслоения плотной коды, я делаю это:

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, который я ожидаю.

Как исправить это? Я попытался оглядеть документы Метеор, и я не могу найти функцию, которая принудительно повторно отображает шаблон. Любая помощь будет высоко ценится!

+0

Весь код доступен здесь, кстати: [ссылка] (https://github.com/KixPanganiban/flickowl) –

ответ

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) 
} 
+0

Эй, спасибо так много! Следующий вопрос здесь, как мне достичь того же, если я использую другую переменную, а не сессию? Таким образом, когда он изменяется, он будет повторно запускать любую функцию, которая привязана к нему. Благодаря! –