1
geladen

Ich habe eine VorlageMeteor - Veranstaltung auf {{if current}} Inhalt

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

ich

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

Aber in Methoden der Vorlage hinzufügen möchten:

  • OnCreated
  • onRendered

Inhalt von {{#if currentUser}} ist nicht zugänglich, da die Sammlung mit Benutzer nach Vorlage geladen wird. Ich kann setTimeout verwenden, aber das ist nicht stabile Lösung. Ich kann Vorlage

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

eingeben, aber das ist nicht elegant.

Wie fangen Sie Rendering von Inhalt in Block {{if currentUser}} in richtiger Weise? Oder vielleicht sollte ich diese Syntax nicht allgemein verwenden und es gibt eine andere Art der Überprüfung, ob der Benutzer geladen ist. Wenn ja, verlinken Sie bitte zum richtigen Tutorial.

Antwort

1

Der Weg, dies zu tun ist, um den Inhalt der if eine andere Vorlage, und verwenden Sie dann die onRendered oder onCreated Methoden dieser Vorlage.

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

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

JS:

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

@Christian Fritz Antwort gut funktioniert.

Falls Sie nicht wollen, eine neue Vorlage erstellen, weil einige andere Fragen können Sie auch versuchen, dies in der onRendered Rückruf:

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