Meteor的template.rendered在实际呈现页面之前调用

时间:2014-07-17 01:55:02

标签: javascript jquery meteor

我尝试在呈现网页时向input标记添加自动填充功能。

Template.friends.rendered = function () {
    var users = Meteor.users.find({}).fetch();
    // this gets all usernames from the local minimongo
    var names = users.map(function (user) {
        return user.username;
    });
    console.dir($("#addFriendSearch"));
    $("#addFriendSearch").autocomplete({source: names});
    alert();
};

console.dir告诉我它无法找到#addFriendSearch元素。要查看调用渲染函数的时间,我将警报放在函数的末尾。警报显示之前我的表单呈现。

我找到了另一种解决方案,它完美无缺,但由于rendered应该正常工作,我不满足于此。

我的另一种解决方案是将Template.friends.rendered重命名为Template.friends.methods,并将其称为模板中的UI助手,如下所示:

<template name="friends">
    ...
    {{methods}} <!-- last in the template -->
</template>

1 个答案:

答案 0 :(得分:0)

如果#addFriendSearch被帮助程序包装(即{{#if}}或类似的东西) - 这样你应该等待Template.friends上的第一次计算完成。试试这个:

Template.friends.rendered = function () {
    Meteor.defer(function () {
        $("#addFriendSearch").autocomplete({source: names});
    });
};