23

我知道meteor会为DOM元素公开诸如“点击”之类的事件,但我想知道在加载模板或部分时是否会触发加载事件?我将如何做到这一点?

谢谢。

4

3 回答 3

42

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

然而,在Template.myTemplate.createdDOM 中还没有准备好。

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

Template.myTemplate.rendered = function() {
    if(!this._rendered) {
      this._rendered = true;
      console.log('Template onLoad');
    }
}
于 2012-09-03T03:45:51.450 回答
11

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

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

Template.temp.invokeAfterLoad = function () {
  Meteor.defer(function () {
     $('mydiv').jquerify();
  });
  return "";
};
于 2012-06-23T11:42:54.127 回答
5

我会推荐这个而不是接受的答案,恕我直言,稍微少一点:

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

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

这样做的好处是您无需向模板添加动画代码。

于 2012-07-24T16:49:31.547 回答