2014-10-29 2 views
0

< #each>가있는 템플릿이 있습니다.Meteor : 이벤트에서 db.find() 변경

<template name="listing"> 

     {{#each adList}} 

      {{> adItemTemplate}} 

     {{/each}} 

    </template> 

이 코드를 사용하여>는 < #each에 데이터를 전송하고 있습니다 :

Template.listing.adList = function(){ 

     return listingDB.find() 

    } 

이 나에게 기사의 좋은 목록을 제공합니다. 그러나, 나는 이것으로 목록을 좁히는 버튼을 가지고있다.

listingDB.find({location:"newyork"}) 

내가 이벤트 아무것도하지만 그것을 할 노력하고있어 상황이 발생합니다 내가 무엇을 놓치고

Template.narrowSearch.events({ 

     "click .search":function(){ 

      listingDB.find({location:"newyork"}) 

     } 

    }) 

?

들으,

답변

1

두 가지를 :

  1. 오직 무엇을 바꿀 것 코드에서 아무것도 어떤 헬퍼 함수가 반환 및 렌더링 귀하의 템플릿 그건. 이벤트 처리기에서 완전히 별도의 데이터베이스 쿼리를 실행하고 있으며 결과는 어디에도 없습니다.

  2. 템플릿 도우미 재 실행 반응적으로 일부 설정을 변경하면 reactive data source에 의존해야합니다.

그래서 모두의 결말은 같은 일을해야한다는 것입니다 : 세션 변수이 반응성을 제공하는 유일한 (또는 반드시 올바른) 방법이 아니라고

Session.set("query", {}); 

Template.listing.adList = function() { 
    return listingDB.find(query); 
} 

Template.narrowSearch.events({ 
    "click .search":function() { 
     Session.set(query, { 
      location: "newyork" 
     }); 
    } 
}) 

주 - 좀 더 사적인 것을 원할 경우 ReactiveVar을 사용하십시오.

0
Template.listing.adList = function(){ 
    var query = Session.get('query') || {}; 

    return listingDB.find(query); 

} 

Template.narrowSearch.events({ 

    "click .search":function(){ 
     Session.set(query, {location: 'newyork'}); 

    } 

}) 
명심하기
관련 문제