2013-08-21 70 views
2

對於粗略編寫的問題,我表示歉意,但我不確定使用流星,mongo和車把組合的最佳做法。從Meteor中複雜的MongoDB查詢渲染模板?

我明白製作車把的邏輯不那麼重要,儘管我在Jade中會感覺更舒適,但我仍然使用車把來支持本地流星。但是,我不知道將數據分配給模板的最佳方式可能是什麼。

這尤其是在我需要訪問多個集合並訪問另一個集合中的另一個文檔(由Id)引用的文檔的情況下,或者在需要使用通常從for循環提供的索引變量的情況下。保留Meteor的自動更新功能似乎爲這件事增添了一點複雜性。

我想,在一個問題的形式:

我應該使我的複雜的查詢,將它們連接的所有成對象的單個陣列(使得所有相關數據是嵌套的),加入每個索引變量,並使數組可用於在模板中循環?

- 或 -

我應該做的每個模板的控制器的每個數據庫查詢,然後嘗試將數據向下突破最簡單的形式和發送多組數據的模板?

我真的很感激任何形式的答案,可能導致我在正確的方向。

回答

4

我建議第二個選項。可能最簡單的方法,與反應性很好地發揮作用如下。

假設你已經有了與ArticlesCommentsMeteor.users集合了博客,在可預見的方式有關 - 這是一個commentarticleIduserId領域。另外讓articlecomment都有一個content字段。如果你需要顯示多個

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

因此,鬆散地適應你的博客例如,你會怎麼做:你可以用下面的模板顯示出來:

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

現在,你得到的數據如下文章和他們在網頁上的評論?你會多次迭代同一篇文章嗎?你如何通過身份證? –

+0

在模板中,用'#each'替換'#with'。在'article'助手中,用'find({_ id:{$ in:[id1,id2,id3]}})'替換'findOne(articleId)'。 –