1

をロード{CurrentUserには}場合{}私は流星 - コンテンツ

$('#datetimepicker').datetimepicker(); 

しかし、テンプレートの方法で追加する必要テンプレート

{{#if currentUser}} 
    <input id="datetimepicker" type="text" > 
{{/if}} 

持っ上のイベント:

  • をonCreated
  • onRendered

コンテンツは{{#if currentUser}}にアクセスできません。これは、テンプレートを使用してユーザーとともにコレクションが読み込まれるためです。私はsetTimeoutを使うことができますが、これは不安定な解決策です。私はテンプレートを入力することができます

{{#if currentUser}} 
    <input id="datetimepicker" type="text" > 
    <script> 
     $('#datetimepicker').datetimepicker(); 
    </script> 
{{/if}} 

これはエレガントではありません。

ブロック{{if currentUser}}のコンテンツのレンダリングを正しく行うにはどうすればよいですか?あるいは、私はこの構文を一般的に使用しないでください。ユーザーがロードされているかどうかを確認する他の方法があります。はいの場合は、適切なチュートリアルにリンクしてください。

答えて

1

これを行う方法は、ifのコンテンツを別のテンプレートにしてから、そのテンプレートのonRenderedまたはonCreatedメソッドを使用することです。

{{#if currentUser}} 
    {{> datePicker}} 
{{/if}} 
... 

<template name="datePicker"> 
    <input id="datetimepicker" type="text" > 
</template> 

JS:

Template.datePicker.onCreated(() => { 
    // something 
}); 
1

@Christianフリッツの答えはうまく動作します。

あなたがあるため、いくつかの他の問題の新しいテンプレートを作成したくない場合は、あなたもonRenderedコールバックでこれを試すことができます。

Tracker.autorun(function() { 
    if ($('#datetimepicker')[0]) { 
    $('#datetimepicker').datetimepicker(); 
    } 
});