2013-02-10 38 views
2

我有以下情況。有一個收集供應商和另一個邀請。現在Invited.supplier = Supplier._id(語法可能是錯誤的)被邀請的集合是指一對多時尚的供應商。Meteorjs顯示參考文檔字段

在我的html,我有

<template name="mytemplate"> 
{{#each invited_list}} 
{{supplier}} 
{{f1}} 
{{f2}} 
{{/each}} 
</template> 

我有一個輔助功能

Template.mytemplate.helpers({ 
invited_list : function(){ 
return Invited.find({"something"}); 
} 
}); 

我想中顯示,而不是_id {{Suppliers.name}} {{供應商}}在我的invite_list中。我有什麼選擇?

回答

1

可以創建一個分解器功能,諸如:

Template.mytemplate.helpers({ 
    invited_list : function(){ 
     return resolveSupplierToNames(Invited.find({"something"}).fetch()); 
    } 
}); 

function resolveSupplierToNames(invitedList) { 
    for (var i=0; i<invitedList.length; i++) { 
     invitedList[i].supplier = Suppliers.findOne({_id: invitedList[i].supplier}).name; 
    } 

    return invitedList; 
} 

通常有與mongodb的兩種選擇,一種是上述(手動)。其次是使用DBRefs。不過我不確定meteor是否完全支持DBRefs。正如mongodb文檔中所建議的那樣,手動執行操作沒有任何問題。

更新

流星自推出變換功能,你可以做類似的事情一樣:

Template.mytemplate.helpers({ 
    invited_list : function(){ 
     return Invited.find({"something"},{transform:function(doc) { 
      doc.supplier_name = Suppliers.findOne({_id: doc.supplier_id}).name; 
      return doc; 
     }); 
    } 
}); 
+0

偉大的作品非常乾淨。感謝名單! – v2gods 2013-02-11 10:05:50

+0

我正在閱讀這個答案,試圖做同樣的事情,並且在閱讀時添加了轉換更新。非常感謝。 – 2013-05-22 16:48:30