2

始める前に、次の手順に従いました: Meteor メールで他のユーザーに問い合わせる

また、ユーザーの公開と、ID、ユーザー名、およびプロファイル以外のフィールドを追加する方法に関する Meteor のドキュメントを読みました。これらすべてにもかかわらず、私の状況は存在します。

現在ログインしているユーザー以外のユーザーの電子メール アドレスにアクセスしようとしています。このアクセスが必要なテンプレートが 2 つあります。最初のテンプレートは機能し、アクセスできます。2 番目のテンプレートはできません。

これは、メールフィールドを公開して購読するためのセットアップコードです(「アドレス」を指定しないことも試みました[例:フィールド:{メール:1}]が、同じ結果が得られます)

if (Meteor.isServer) {
    Meteor.publish("allUsers", function () {
        return Meteor.users.find({});
    });
    Meteor.publish("allUserData", function () {
        return Meteor.users.find({}, {fields: {"emails.address": 1}});
    });
};

if (Meteor.isClient) {
    Meteor.subscribe("allUsers");
    Meteor.subscribe("allUserData");
};

機能するテンプレートのコードは次のとおりです。

Template.createPartner.events({
    'click .setup-partner' : function(event, template) {
        var partner = Meteor.users.findOne({"emails.address": 'example@mail.com' }); <-- works
    }
});

動作しないテンプレートのコードは次のとおりです。

Template.infoSelect.partnerEmail = function() {
    var partnerId = Meteor.user().profile.partnerId; <-- works
    var partner = Meteor.users.findOne({_id: partnerId}); <-- works but only _id and profile are returned
    return partner.emails[0].address; <-- throws exception because the 'emails' field doesn't exist
};

私もこれを試しましたが、違いはありません:

var partner = Meteor.users.find({_id: partnerId}, {fields: {"emails.address": 1}});

2 番目のテンプレートではユーザーのメール アドレスが表示されないのに、最初のテンプレートでは表示されるのはなぜですか?

4

1 に答える 1

4

同じコレクションの 2 つのセットを購読しているためだと思います。Meteor は最初のサブスクリプションを使用し、2 番目のサブスクリプションを無視します。しかし、なぜそれが1つの機会に機能するのかはわかりません。

最初のサブスクリプションを削除して 2 番目のサブスクリプションを使用すると、機能するはずです。基本的に次の行を削除します。

Meteor.subscribe("allUsers");

もう1つのヒント。メール機能を次のように変更できます。

Template.infoSelect.partner = function() {
    var partnerId = Meteor.user().profile.partnerId; <-- works
    var partner = Meteor.users.findOne({_id: partnerId}); <-- works but only _id and profile are returned
    return partner;
};

そして、あなたのハンドルバーは次のようになります:(パートナー変数のオプションが増えるだけなので、名前で彼/彼女を参照することもできます)

<template name="infoSelect">
{{partner.email.0.address}}
{{partner.profile.name}} <!--If you have configured profiles -->
</template>
于 2013-02-10T21:24:14.840 に答える