Javascript 模板呈现顺序:子模板之前的父触发器
我是Meteor的新手,在理解模板上的“渲染”事件时遇到了困难 假设我有两个模板:Javascript 模板呈现顺序:子模板之前的父触发器,javascript,jquery,meteor,meteor-blaze,Javascript,Jquery,Meteor,Meteor Blaze,我是Meteor的新手,在理解模板上的“渲染”事件时遇到了困难 假设我有两个模板: <template name="parent"> <div id="list"> {{#each childs}} {{> child}} {{/each}} </div> </template> <template name="child"> <div
<template name="parent">
<div id="list">
{{#each childs}}
{{> child}}
{{/each}}
</div>
</template>
<template name="child">
<div class="item">
<!-- content -->
</div>
</template>
我总是从控制台得到这个:
> parent
> child
> child
> child
由于这是在呈现内部模板之前执行的,因此会破坏插件
当一个模板(包括它的内部模板)完全呈现时,有没有一种解决方法或meteor事件可以让我现在安全地使用?我对此类问题的一般建议是,在呈现每个孩子之后,你应该寻找一种激活插件的方法,而不是在呈现父级之后——即使这意味着对插件进行额外调用。如果你能做到这一点,那么它也解决了相关的问题,即当以后添加更多的孩子时会发生什么(当然,这可能不适用于你的情况) 如果不知道插件的更多细节,很难给出准确的答案,但我可以从我的一个应用程序中给出一个例子: 我必须确保所有的孩子都和最高的孩子一样高。我最初的反应是,我不得不以某种方式等待所有的孩子完成渲染,然后调整他们的高度一次。更简单的解决方案是每次渲染它们中的任何一个时调整它们的大小。当然,这是O(N^2)比较,但对于一个小列表来说,它仍然很快,即使添加了新的子项,它也能工作
请注意,如果您必须调用插件一次,并且以后不能添加新的子项,那么您可以尝试一种丑陋的方法,只有在所有子项都呈现之后才初始化插件。例如:
Template.child.rendered = function () {
if ($('.child').length === Children.find().count()) {
$('#list').myplugin();
}
};
Template.parent.rendered = function () {
$('#list').myplugin();
};
Template.child.rendered = function () {
if ($('.child').length === Children.find().count()) {
$('#list').myplugin();
}
};