我知道Meteor可以暴露像"click"这样的DOM元素事件,但我想知道是否有在加载模板或局部时触发的load事件?我该如何实现?谢谢。
Template.myTemplate.created
。Template.myTemplate.created
中,DOM 尚未准备好。Template.myTemplate.rendered
并使用布尔值来跟踪模板对象中的状态,如下所示: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.temp.helpers(...)
。 - thdoan我会更推荐这个答案,相较于被接受的答案,我认为这个稍微好一些:
<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();
});
};
Template.myTemplate.rendered
已被弃用。虽然它仍支持向后兼容性,但您可能希望在较新的版本中使用Template.myTemplate.onRendered
。来源 - clemlatz