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;
}
});