meteor.js的模板onload事件

时间:2012-06-23 06:21:12

标签: javascript meteor

我知道meteor暴露了诸如“click”之类的事件,对于DOM元素,但是我想知道在加载模板或部分时是否有一个加载事件?我该如何做到这一点?

感谢。

3 个答案:

答案 0 :(得分:42)

对于从0.4.0预览开始的Meteor,您可以使用Template.myTemplate.created

Template.myTemplate.created中,DOM尚未就绪。

如果需要操作DOM,可能需要使用Template.myTemplate.rendered代替并使用布尔值来跟踪Template对象中的状态,如下所示:

Template.myTemplate.rendered = function() {
    if(!this._rendered) {
      this._rendered = true;
      console.log('Template onLoad');
    }
}

答案 1 :(得分:11)

以下应该工作。
一旦将模板添加到DOM并进行渲染,就会调用Meteor.defer。

<template name="temp">
    //regular stuff
    {{invokeAfterLoad}}
</template>

Template.temp.invokeAfterLoad = function () {
  Meteor.defer(function () {
     $('mydiv').jquerify();
  });
  return "";
};

答案 2 :(得分:4)

我推荐这个而不是接受的答案,稍微不那么粗糙恕我直言:

<template name="temp">
    {{aReactiveHelper}}
</template>

Template.temp.aReactiveHelper = function() {
  var someValue = Session.get('someValue');
  invokeAfterLoad();
  return someValue;
};

var invokeAfterLoad = function () {
  Meteor.defer(function () {
     $('mydiv').doSomething();
  });
};

假设您希望在模板加载后调用某些内容,因为它会对反应对象做出反应。

这里的好处是您不会在模板中添加动画代码。