2013-06-16 2 views
1

Meteor로 무료 TV 추적 앱을 제작 중이며, 벽을 치는 것처럼 보입니다.변수 지정 후 Meteor.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"서버 방법은 개체를 반환 단지 컬렉션 쿼리 방법 :

<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 코드 내에서, 내가 이렇게 내 템플릿의 부분이 포함 내 템플릿에 필요한 데이터가 들어 있습니다.

그러나 문제는 다음과 같습니다. 변경 내용이 브라우저 창에 반영되지 않았습니다. 이유를 알아낼 수 없습니다. 아래에 표시된 console.log (Template.results()) 호출은 내가 기대하는 올바른 html을 반환하기 때문에 나타납니다.

어떻게 수정합니까? Meteor의 문서를 둘러 보았는데 템플릿을 강제로 다시 렌더링하는 기능을 찾지 못하는 것 같습니다. 어떤 도움을 많이 주시면 감사하겠습니다!

+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

이봐, 정말 고마워요! 후속 질문으로, 세션 변수가 아닌 다른 변수를 사용하면 어떻게 같은 결과를 얻을 수 있습니까? 변화가 생길 때, 그것에 붙는 모든 기능을 재실행 할 것입니다. 감사! –

관련 문제