流星 - {{if currentUser}} 内容加载事件

Meteor - event on {{if currentUser}} content loaded

我有模板

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

我想添加

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

但是在模板方法中:

无法访问 {{#if currentUser}} 的内容,因为包含用户的集合是在模板之后加载的。我可以使用 setTimeout,但这是不稳定的解决方案。我可以输入模板

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

但这并不优雅。

如何以正确的方式捕获块 {{if currentUser}} 中内容的呈现?或者也许我不应该通常使用这种语法,还有其他检查用户是否加载的方式。如果是,请 link 到正确的教程。

方法是将 if 的内容制作成另一个模板,然后使用该模板的 onRenderedonCreated 方法。

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

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

JS:

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

@Christian Fritz 的回答很好。

如果您因为某些其他问题不想创建新模板,您也可以在 onRendered 回调中尝试此操作:

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