Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 模板呈现顺序:子模板之前的父触发器_Javascript_Jquery_Meteor_Meteor Blaze - Fatal编程技术网

Javascript 模板呈现顺序:子模板之前的父触发器

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

我是Meteor的新手,在理解模板上的“渲染”事件时遇到了困难

假设我有两个模板:

<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();
  }
};