2017-04-30 5 views
1

내 코드에서 책에 대한 정보를 저장하는 컬렉션에 액세스하려고합니다. 각 책의 ID 만 저장하는 배열을 반복합니다. 그럼 각 책템플릿 도우미에서 여러 번 액세스 할 수 있도록 JSON 문서를 저장할 수있는 곳은 어디입니까?

Template.myBorrows.helpers({ 
    storeInSession:function(ilendbooksId) { 
    console.log("storeInSession is called"); 
    var currentBorrowBook = Books.findOne({_id: ilendbooksId}); 
    Session.setAuth('currentBorrowBook' , currentBorrowBook); 
    }, 

    getAuthor: function() { 
    var currentBorrowBook = Session.get('currentBorrowBook'); 
    return currentBorrowBook.ItemAttributes[0].Author[0]; 
    }, 
}); 

나는 책 컬렉션의 책의 _id에 의해 도서 문서를 조회하고 대한 완전한 정보를 저장하는 책이라고 모음에서 책을 조회 할 해당 ID를 사용하고 있습니다. 그런 다음 세션에 저장하고 정보를 얻기 위해 적절한 메소드를 호출합니다. 유일한 문제는 책의 배열에 대해이 작업을 수행해야하므로 세션의 이전 문서를 덮어 쓰고 페이지의 모든 데이터가 가장 최신 세션 문서로 바뀔 때마다 문제가됩니다. 각 책의 문서를 어디서 어떻게 저장할 수 있으며 가장 최신의 세션 문서로 업데이트하지 않고 올바른 정보가 표시되는지 확인하십시오.

+0

당신은 인생을 불필요하게 복잡하게 만듭니다. Meteor에 대한 블레이즈 기반 자습서를 수행 했습니까? 도우미에서 세션 변수를 설정하면 안됩니다. 대신 이벤트 핸들러에서 세션 변수를 설정하십시오. 책 모음을 반복하는 경우 각 책에 대한 메소드 호출이 필요 없으며 도우미 없이도 템플릿에서 각 책의 속성에 직접 액세스 할 수 있습니다. –

+0

죄송합니다. 분명히해야합니다. 각 책에 대한 충분한 정보를 저장 한 모음집을 반복한다면 예, 각 속성에 액세스 할 수 있습니다. 실제로 각 책의 ID 만 저장하는 배열을 통해 반복됩니다. 그런 다음 해당 ID를 사용하여 각 책에 대한 완전한 정보를 저장하는 Books라는 컬렉션에서 책을 쿼리합니다. – Zorrow2008

답변

0

귀하의 의견에 답변을하려면 문서 _id의 배열이 있고 템플릿에서 문서를 가져 오려고합니다.

HTML :

<template name="myTemplate"> 
{{#each array}} 
    {{#with doc}} 
    Author: {{author}} 
    {{/with}} 
{{/each}} 
</template> 

JS : 배열의 요소가 될 것이다

Template.myTemplate.helpers({ 
    array(){ return theArrayOfIdsThatYouveDefined; }, 
    doc(){ return Books.findOne(this); } 
}); 

{{#each array}}this 내부 루프. doc 도우미는 Books 컬렉션에서 책을 찾고 반환합니다. 이제 {{#with doc}} 블록 안에 데이터 컨텍스트가 책 객체가됩니다.

세션 변수 또는 메서드 호출이 필요 없습니다.