1

我有一个模板

{{#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}}正确的方式捕获块中内容的渲染?或者也许我不应该普遍使用这种语法,并且还有其他方式来检查用户是否已加载。如果是,请链接到正确的教程。

4

2 回答 2

1

@Christian Fritz 的回答效果很好。

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

Tracker.autorun(function() {
  if ($('#datetimepicker')[0]) {
    $('#datetimepicker').datetimepicker();
  }
});
于 2017-06-17T05:15:06.487 回答
1

这样做的方法是制作if另一个模板的内容,然后使用该模板的onRenderedoronCreated方法。

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

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

JS:

Template.datePicker.onCreated(() => {
  // something
});
于 2017-06-17T04:44:05.740 回答