使用嵌套模板控制Meteor中的JS加载顺序会破坏template.rendered吗?

时间:2014-11-07 12:33:01

标签: meteor

我有一个名为index的模板,由一堆部分模板组成。

<template name="index">
  {{> jumbotron }}
  {{> crew }}
  {{> projects3 }}
  {{> projects2 }}
  {{> faq }}
  {{> contact }}
</template>

假设我有JS代码page-transitions.js,需要完全加载jumbotron的DOM才能运行。

简单的做法是不够的:

Template.index.rendered = function(){
  // load page-transitions.js
};

我必须做

Template.jumbotron.rendered = function(){
  // load page-transitions.js here instead
};

这可能会非常快速,因为您需要非常具体地了解哪些部分模板需要哪些JS代码。并且不同的模板可能需要相同的JS代码,因此您可能遇到多次加载相同JS代码的情况。

有没有办法等到index模板完全呈现一切,包括所有嵌套的子模板,然后运行JS代码?

在这种情况下,

Meteor.startup()也不起作用。

1 个答案:

答案 0 :(得分:1)

您可以尝试以下几点:

首先,只使用经典的jQuery.ready方式。因为,为什么不呢?

 Meteor.startup(function() {
    $(document).ready(function() {
       // stuff.
    });
 });

或者您可以尝试Tracker.afterFlush

Meteor.startup(function() {

   // I know each Template.template.rendered has its own afterFlush, but those
   //   computations are defined way before Meteor.startup so then, theoretically,
   //   the below code should be executed last even if it triggers recomputations here.

   Tracker.afterFlush(function() {
      // stuff.
   });

});