在Meteor.js应用程序中,铁路由器路由的'window.onload`的真正等价是什么?

时间:2015-10-25 19:18:57

标签: javascript meteor iron-router

我有这样定义的铁路线(注意onAfterActioninitProfileComponent

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之外,在哪里/如何定义一个确保模板完全呈现的回调。或者,我应该订阅什么?

1 个答案:

答案 0 :(得分:2)

理想情况下,这应该在您的模板中完成。在Meteor中,所有模板都有onCreatedonRendered个回调。如果使用onRendered,则可以确保所有DOM元素都已存在。

Template.sliderComponent.onRendered(function(){
    var elements = $('.sliderComponent');
    //... do stuff and decorate the elements
});

最好像这样初始化模板。正如您所做的那样,使用Iron Router参数化模板。