3

Meteor 0.8.0 のテンプレート ヘルパー内からユーザー プロファイル データを取得する際に問題が発生しています。このコードは以前のバージョンでは正常に機能していましたが、今朝のアップグレード以降、機能しなくなりました。私は当初、これはテンプレート ヘルパーが 2 回実行される問題だと思っていましたが、調べてみると、それよりも少し微妙な問題であることがわかりました。

テンプレート ヘルパーの下で、'findClientLiason' が 2 回呼び出されます (出力はコンソールに 2 回記録されます)。ユーザーが最初に「未定義」として表示されるのは 2 回目で、正しいユーザー オブジェクトが期待どおりに表示されます。どちらの場合も、「clientLiason」は正しく出力されます。

私にとって最も興味深いのは、「var user = Meteor.users.findOne({_id: clientLiason});」を削除すると、呼び出して findOne 呼び出しを取得すると、ヘルパーは 1 回だけ呼び出されます。

Meteor.users コレクションへの呼び出しがデータベースへの別の呼び出しを強制するように私には見えます。そして、初めてそれを呼び出したとき、Meteor.users コレクションは空です。

以下に示す出版物と購読を持っています。Iron Router のグローバルな waitOn() 関数を使用していますが、Meteor.users コレクションを先にロードする必要があるかどうか疑問に思っていますか?

どんなアイデアでも大歓迎です。再度、感謝します。

出版物.js

Meteor.publish('allUsers', function() {
    return Meteor.users.find();
});

router.js

Router.configure({
    layoutTemplate: 'layout',
    loadingTemplate: 'loading',
    waitOn: function() { 
        return [    
            Meteor.subscribe('clientsActive'),
            Meteor.subscribe('allUsers'),
            Meteor.subscribe('notifications')
        ];
}
});

clientItem.html

<template name="clientItem">
    {{findClientLiason clientLiason}}
</template>

clientItem.js

Template.clientItem.helpers({
    findClientLiason: function(clientLiason) {
        var user = Meteor.users.findOne({_id: clientLiason});
        console.log(clientLiason);
        console.log(user);
        return user.profile.name;
    }
});
4

1 に答える 1