流星 - {{if currentUser}} 内容加载事件
Meteor - event on {{if currentUser}} content loaded
我有模板
{{#if currentUser}}
<input id="datetimepicker" type="text" >
{{/if}}
我想添加
$('#datetimepicker').datetimepicker();
但是在模板方法中:
- onCreated
- onRendered
无法访问 {{#if currentUser}}
的内容,因为包含用户的集合是在模板之后加载的。我可以使用 setTimeout
,但这是不稳定的解决方案。我可以输入模板
{{#if currentUser}}
<input id="datetimepicker" type="text" >
<script>
$('#datetimepicker').datetimepicker();
</script>
{{/if}}
但这并不优雅。
如何以正确的方式捕获块 {{if currentUser}}
中内容的呈现?或者也许我不应该通常使用这种语法,还有其他检查用户是否加载的方式。如果是,请 link 到正确的教程。
方法是将 if
的内容制作成另一个模板,然后使用该模板的 onRendered
或 onCreated
方法。
{{#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();
}
});
我有模板
{{#if currentUser}}
<input id="datetimepicker" type="text" >
{{/if}}
我想添加
$('#datetimepicker').datetimepicker();
但是在模板方法中:
- onCreated
- onRendered
无法访问 {{#if currentUser}}
的内容,因为包含用户的集合是在模板之后加载的。我可以使用 setTimeout
,但这是不稳定的解决方案。我可以输入模板
{{#if currentUser}}
<input id="datetimepicker" type="text" >
<script>
$('#datetimepicker').datetimepicker();
</script>
{{/if}}
但这并不优雅。
如何以正确的方式捕获块 {{if currentUser}}
中内容的呈现?或者也许我不应该通常使用这种语法,还有其他检查用户是否加载的方式。如果是,请 link 到正确的教程。
方法是将 if
的内容制作成另一个模板,然后使用该模板的 onRendered
或 onCreated
方法。
{{#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();
}
});