【问题标题】:Meteor's template.rendered called before the page is actually renderedMeteor 的 template.rendered 在页面实际渲染之前调用
【发布时间】:2014-07-17 17:44:50
【问题描述】:

当我的页面被渲染时,我正在尝试将自动完成添加到 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>

【问题讨论】:

    标签: javascript jquery meteor


    【解决方案1】:

    如果#addFriendSearch 被助手包裹(即{{#if}} 或类似的),你应该等待Template.friends 上的第一个计算完成。试试这个:

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

    【讨论】:

    • 不,添加延迟不起作用。我之前已经尝试过了。
    • 你能发布完整的模板 html 吗?
    猜你喜欢
    • 2014-12-08
    • 2015-07-21
    • 2014-08-26
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2020-12-12
    相关资源
    最近更新 更多