我知道meteor暴露了诸如“click”之类的事件,对于DOM元素,但是我想知道在加载模板或部分时是否有一个加载事件?我该如何做到这一点?
感谢。
答案 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();
});
};
假设您希望在模板加载后调用某些内容,因为它会对反应对象做出反应。
这里的好处是您不会在模板中添加动画代码。