2

我有以下情况。有一个集合 Suppliers 和另一个 Invited。现在 Invited.supplier = Supplier._id (语法可能是错误的) Invited collection 是指一对多方式的供应商。

在我的 html 中,我有

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

我有一个辅助功能

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

我想在我的邀请列表中显示 {{Suppliers.name}} 而不是 _id in {{supplier}} 。我有哪些选择?

4

1 回答 1

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。但是我不确定流星是否完全支持 DBRefs。正如 mongodb 文档中所建议的那样,手动执行它没有任何问题。

更新

Meteor 已经引入了一个变换函数,你可以做类似的事情:

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;
        });
    }
});
于 2013-02-10T08:27:27.270 回答