2016-03-06 68 views
0

所以我用publishComposite在流星裏做了一個集合連接。我有一個帶有user_id外鍵的父集合(訂閱)。我在Meteor.users集合中查找用戶名以獲得實際的用戶名,但是如何在html模板中實際打印這些內容。我的訂閱數據在那裏,但我如何實際引用用戶名?流星,發佈:複合。如何訪問模板中的連接數據?

這裏發佈代碼:

//publish subscriptions course view 
Meteor.publishComposite('adminCourseSubscriptions', function(courseId){ 
    return { 
    //get the subs for the selected course 
    find: function(){ 
     return Subscriptions.find(
      {course_id: courseId} 
     ); 
    }, 

    children: 
    [ 
     { 
      //get the subscriber details for the course 
      find: function(sub){ 
       return Meteor.users.find({_id:sub.user_id}); 
      } 

     } 

    ] 
    }; 

}); 

這裏的模板subdcriptions:

Template.adminCourseDetail.helpers({ 
    courseDetail: function(id){ 
    var id = FlowRouter.getParam('id'); 
    return Courses.findOne({ _id: id }); 
    }, 
    courseSubscriptions: function(){ 
    var id = FlowRouter.getParam('id'); 
    return Subscriptions.find({course_id:id}) 
    }, 
    users: function(){ 
    return Meteor.users.find(); 
    } 
}); 

和模板(這是垃圾)PS課程內容來自一個單獨的集合。這是更容易,我認爲更高性能分開獲取細節,這工作正常。這只是我無法正確顯示的用戶名:

<template name="adminCourseDetail"> 
<h1>Course Details</h1> 
<p>Title: {{courseDetail.title}}</p> 
<p>Description: {{courseDetail.description}}</p> 
<p>Start Date: {{courseDetail.startDate}}</p> 
<p>Number of sessions: {{courseDetail.sessions}}</p> 
<p>Duration: {{courseDetail.duration}}</p> 
<p>Price: {{courseDetail.price}}</p> 
<p>{{userTest}}</p> 
<a href="#">edit</a> 
<a href="#">delete</a> 
<h2>Course Subscriptions</h2> 
{{#each courseSubscriptions}} 
    <div class="row"> 
     <div class="col-md-3">{{username}}</div> 
     <div class="col-md-3">{{sub_date}}</div> 
    </div> 
{{/each}} 
</template> 

在此先感謝您的任何建議!

回答

1

據我瞭解您的問題,Subscriptions集合的文檔僅包含屬性user_id,引用Meteor.users集合中相應的用戶文檔。如果是這樣的話,那麼你需要添加額外的模板助手返回用戶名:

Template.adminCourseDetail.helpers({ 
    // ... 
    getUsername: function() { 
     if (this.user_id) { 
     let user = Meteor.users.find({ 
      _id: this.user_id 
     }); 
     return user && user.username; 
     } 
     return "Anonymous"; 
    } 
    // ... 
}); 

之後,只需更換{{username}}{{getUsername}}

<template name="adminCourseDetail"> 
    <!-- ... --> 
    <h2>Course Subscriptions</h2> 
    {{#each courseSubscriptions}} 
     <div class="row"> 
     <div class="col-md-3">{{getUsername}}</div> 
     <div class="col-md-3">{{sub_date}}</div> 
     </div> 
    {{/each}} 
    <!-- ... --> 
</template> 

也許你誤解的概念reywood:publish-composite包。使用Meteor.publishComposite(...)將只是發佈反應式連接,但它不會返回一組新的連接數據。

+0

感謝馬蒂亞斯,我完全忘了叫從每塊內的助手時,助手叫你通過循環光標的背景下,因此使該光標數據,通過使用「這個」訪問。試圖弄清楚如何鏈接集合中的數據,我感到十分困惑。 :) –

1

對於有類似問題的人來說,看看我的具體例子。在我的情況下,以下代碼工作。基於馬蒂亞斯的回答:

在模板助手:

getUsername: function() { 
    let user = Meteor.users.findOne({ 
     _id: this.user_id 
    }); 
    return user; 
} 

,然後在模板:

{{getUsername.username}} 

我的每個塊通過遊標循環從訂閱集合返回,而不是這就是爲什麼它比Matthias提供的代碼更簡單。