我知道meteor会为DOM元素公开诸如“点击”之类的事件,但我想知道在加载模板或部分时是否会触发加载事件?我将如何做到这一点?
谢谢。
对于从 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');
}
}
以下应该工作。
一旦将模板添加到 DOM 并渲染,Meteor.defer 就会被调用。
<template name="temp">
//regular stuff
{{invokeAfterLoad}}
</template>
Template.temp.invokeAfterLoad = function () {
Meteor.defer(function () {
$('mydiv').jquerify();
});
return "";
};
我会推荐这个而不是接受的答案,恕我直言,稍微少一点:
<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();
});
};
假设您想在模板加载后调用某些内容,因为它正在对反应性对象做出反应。
这样做的好处是您无需向模板添加动画代码。