2

次のシナリオがあります。コレクションSuppliersと別のInvitedがあります。現在、Invited.supplier = Supplier._id(構文が間違っている可能性があります)招待されたコレクションは、1対多の方法でサプライヤーを指します。

私のhtmlには、

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

ヘルパー機能があります

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

私のinvited_listの{{supplier}}に_idの代わりに{{Suppliers.name}}を表示したいと思います。私のオプションは何ですか?

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には一般的に2つのオプションがあり、1つは上記(手動)です。2つ目は、 DBRefを使用することです。ただし、me​​teorがDBRefを完全にサポートしているかどうかはまだわかりません。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 に答える