2013-08-21 3 views
2

대략적으로 초안을 작성한 것에 대해 사과드립니다. 유성, 몽고 및 핸들 바를 어떻게 사용했는지 모릅니다.Meteor에서 복잡한 MongoDB 쿼리의 템플릿을 렌더링 하시겠습니까?

나는 논리가없는 핸들 바 제작의 요지를 잘 알고 있으며, 옥에서 더 편했을지 모르지만 본래의 유성 지원을 위해 핸들 바를 유지했습니다. 그러나 템플릿에 데이터를 할당하는 가장 좋은 방법은 무엇인지 모릅니다.

이것은 특히 여러 컬렉션에 액세스하고 다른 컬렉션 (Id로)에서 다른 문서에서 참조하는 문서에 액세스해야하거나 일반적으로 for 루프에서 제공하는 인덱스 변수를 사용해야하는 경우에 유용합니다 . Meteor의 자동 업데이트 기능을 유지하면 문제가 좀 더 복잡해집니다.

나는 질문의 형태로, 추측 :

나는, (모든 관련 데이터가 중첩되도록) 객체의 단일 배열에 모두 합류, 내 복잡한 쿼리를 만들기는 추가 될해야 각 변수에 인덱스 변수를 추가하고 템플릿에서 루프를 사용할 수 있도록 배열을 만들 수 있습니까?

- 또는

은 그때 가장 간단한 형태로 데이터 아래를 깨려고하고 템플릿에 여러 세트의 데이터를 전송, 각 템플릿의 컨트롤러의 각 DB 쿼리를 만드는해야 하는가?

올바른 방향으로 나를 인도 할 수있는 답변을 보내 주시면 감사하겠습니다.

답변

4

두 번째 옵션을 조언 해 드리겠습니다. 아마도 반응성을 잘 나타내는 가장 쉬운 방법은 다음과 같습니다.

는 예측 가능한 방법으로 관련 Articles, CommentsMeteor.users 컬렉션에 블로그를 가지고 가정 - 그는 commentarticleIduserId 필드가 있습니다. articlecommentcontent 필드를 모두 가지고 있다고합시다. 다음과 같은 템플릿으로 표시 할 수 있습니다 :

<template name="article"> 
    {{#with article}} 
     {{content}} 
     {{#each comments}} 
      {{content}} - {{username}} 
     {{/each}} 
    {{/with}} 
</template> 

을 이제 다음과 같이 데이터를 얻을 : 그래서

Template.article.article = function() { 
    return Articles.findOne(...articleId...); 
}; 

Template.article.comments = function() { 
    return Comments.find({articleId: this._id}); 
}; 

Template.article.username = function() { 
    var user = Meteor.users.find(this.userId); 
    return user ? user.username : ''; 
}; 
+0

느슨하게 블로그 예를 적응하기 위해, 당신은 어떻게 할 것인지 여러 표시하는 데 필요한 경우 기사 및 페이지에 대한 그들의 코멘트? 같은 기사에 여러 번 반복 해 주시겠습니까? 이 신분증은 어떻게 전달합니까? –

+0

템플릿에서'# with'를'# each '로 대체하십시오. 'article' 도우미에서'findOne (articleId)'를'find ({_ id : {$ in : [id1, id2, id3]}})'로 대체하십시오. –

관련 문제