5

私は次のコードを持っています:

Template.analyze.userFullName = function() {
    var u = Meteor.users.findOne({_id: this.userId}, {fields: {name: 1}});
    return u.profile.name;
};

Meteor.users.findOne({_id: this.userId}, {fields: {name: 1}})コンソールで使用すると、以下を返します。

Object
    _id: "79ef0e67-6611-4747-b669-45cc163cc1d8"
    profile: Object
        name: "My Name"

しかし、上記のコードで使用すると、次のようになります。Uncaught TypeError: Cannot read property 'profile' of undefined

なぜこうなった?私がやりたいのは、プロファイルでユーザーのフルネームを取得し、それをテンプレートパーツに渡すことだけです。

4

1 に答える 1

9

テンプレートは、ユーザーがまだ利用できない場合、ページの読み込み時にすぐにレンダリングされるため、エラーが発生します。ありがたいことに、リアクティブなUsersコレクションを使用しているので、利用可能になったときに再レンダリングすることができます。これを行うには、最初にオブジェクトがnullでないかどうかを確認します。

Template.analyze.userFullName = function() {
    // use Meteor.user() since it's available
    if (Meteor.user())
      return Meteor.user().profile.name;
};

このように、ユーザーがnullの場合(ロード中)、テンプレートはエラーをスローしません。データが利用可能になるとすぐに、反応性によってテンプレートが再度呼び出され、画面にレンダリングされます。

于 2013-01-01T00:56:37.693 に答える