我有这样定义的铁路线(注意onAfterAction
和initProfileComponent
)
var initProfileComponent = function () {
var elements = document.querySelectorAll('.sliderComponent');
//... do stuff and decorate the elements
}
Router.route('newProfile', {
path: '/new-profile/:_id',
onAfterAction: function () {
initProfileComponent();
},
data: function () {
return {profile: Profile.findOne({_id: this.params._id})};
}
});
函数initProfileComponent
希望找到使用meteor / mustache发布机制创建的document.querySelectorAll
元素,这就是为什么在onAfterAction
中调用,但显然它不起作用,因为,当它被调用时,元素尚未呈现。
模板的定义如下:
<template name="newProfile">
<div class="main-title new-profile">
new profile
</div>
{{#each profile.properties}}
{{> sliderComponent}}
{{/each}}
</template>
<template name="sliderComponent">
<div class="sliderComponent dragdealer">
<div class="handle">{{label}}</div>
</div>
</template>
除了为我的用例做“buritos”的onAfterAction
之外,在哪里/如何定义一个确保模板完全呈现的回调。或者,我应该订阅什么?
答案 0 :(得分:2)
理想情况下,这应该在您的模板中完成。在Meteor中,所有模板都有onCreated
和onRendered
个回调。如果使用onRendered,则可以确保所有DOM元素都已存在。
Template.sliderComponent.onRendered(function(){
var elements = $('.sliderComponent');
//... do stuff and decorate the elements
});
最好像这样初始化模板。正如您所做的那样,使用Iron Router参数化模板。