3

私はmeteor0.5.4アプリを作成しました-accounts-ui、accounts-passwordを追加し、テンプレートに{{loginButtons}}を追加しましたname="hello"ブロックハットはすべてのmeteor作成に付属しています。

Chromeブラウザコンソールでこれを入力すると、これらのSOソースに従ってMeteor.user()。emails [0] .address- http : //goo.gl/MTQWu、http : //goo.gl/Cnbn7-現在ログインしているユーザーの電子メール。

同じコードをif(Meteor.isClient)セクションに入れようとすると:

Template.hello.greeting = function () {
   return Meteor.user().emails[0].address;
};

私は得る:

 Uncaught TypeError: Cannot read property '0' of undefined foo.js:3
 Exception from Meteor.flush: TypeError: Cannot call method 'firstNode' of undefined

公開関数内にMeteor.user()を配置できない場合、ログインしたユーザーの電子メールを他にどのように取得できますか?これを共有関数にして、クライアント側関数内でMeteor.call('getEmail'、Meteor.userId())を使用して呼び出してみたところ、同様の結果が得られました。

4

1 に答える 1

9

テンプレートは反応的です。つまり、ページが読み込まれるとテンプレートが実行され、依存するデータソースが変更されるとテンプレートが再度実行されます。あなたの場合、最初に実行するときMeteor.user()はまだ準備ができていないため、emails属性がまだないため、エラーが発生します。これを修正するには、ユーザーオブジェクトがまだ存在するかどうかを確認する必要があります。

Template.hello.greeting = function() {
  var user = Meteor.user();
  if (user && user.emails)
    return user.emails[0].address;
}

公開関数内で現在のユーザーを取得するには、を使用しますthis.userId

于 2013-01-15T20:48:59.517 に答える