2017-02-24 9 views
0

これまでに質問されていましたが、適切な答えを見たことがありません。現在、レイアウトテンプレートで{{ #if currentUser.emails.[0].verified }} show data {{else}} please verify email {{/if}}を使用していますが、ユーザーがメールを確認したかどうかを確認しています。このシナリオでは、meteor.user()が完全にロードされていないのでユーザが登録した場合に画面間でちらつきが発生します。currentUser.emails.[0].verifiedはnullを返し、完全にロードされた後はtrueに変更されます。テンプレートをレンダリングする前にMeteor.user()が完全にロードされるのを待ちます。

テンプレートをレンダリングする前に、Meteor.userIdが完全に読み込まれるのを待つ方法がありますか?

答えて

2

「CurrentUserに」ヘルパー埋め込まれた流星は、ユーザーコレクションの準備ができたときにあなたに知らせることができます。

{{#if currentUser}} // Do my stuff {{else}} Checking... // You can also show a spinner image or GIF here
{{/if}}

+0

'{{currentUser.emails。[0] .verified}}'は{{#if currentUser}} 'と同じではありませんexepet特定のフィールドを待つことを求めています。 – bp123

+0

同じではありません。 currentUserはtrueとcurrentUser.emailsを返します。[0] .verifiedはまだfalseです。 {{#if currentUser}} – Ruben

+0

OKの中に{{#if現在の.User.emails。[0] .verified}}を追加する必要があります。そのような簡単な解決策。ありがとう。 '{{#if Template.subscriptionsReady}} ' – bp123

0

通常、テンプレートにTemplate.subscriptionsReadyを使用して、購読されたデータに依存するコードをラップすることができます。 MeteorはcurrentUserのパブリッシュ/サブスクライブを自動的に処理するので、このメソッドが動作するかどうかはわかりません。試してみてください。

例。

{{#if Template.subscriptionsReady}} 
    {{ #if currentUser.emails.[0].verified }} show data {{else}} please verify email {{/if}} 
{{/if}} 
+0

はい、私はこれを試してみたが、しかし、サブスクリプションは、すべてのユーザーのデータが完全に受信されていなくても準備ができて考えられていますd /ロード。これは、データが徐々に読み込まれると、アプリが画面間を移動するのを引き起こします。しかしそれはほんの一瞬ですが、ユーザーエクスペリエンスにとってはひどいです。 – bp123

0

私は私のためにうまく機能することがわかってきたことで、ユーザに加入することです鉄ルータでwaitOn機能のウェイト:

Router.route('/',{ 
     waitOn: [ 
      function() { 
       if (!Meteor.userId()) { 
        Router.go("/login"); 
       } 
       return Meteor.subscribe('currUser'); 
      }, 

     ], 
     ... 
}) 
+0

鉄製のルータですか?フロールータを使用して – bp123

+0

鉄のルータを使用して – mutdmour