gpt4 book ai didi

javascript - Meteor:在 'rendered' 函数中加载集合

转载 作者:行者123 更新时间:2023-11-30 17:32:27 25 4
gpt4 key购买 nike

在我的 Meteor 应用程序中,我有这个 rendered 函数,它需要访问特定的集合。假设我有一个 ToDos 集合

ToDos = new Meteor.Collection('todos');

if (Meteor.isClient) {
Meteor.subscribe('todos');
}

if (Meteor.isServer) {
Meteor.startup(function () {
Meteor.publish('todos', function () {
return ToDos.find({});
});
});
}

现在在渲染函数中我想做这样的事情

Template.todos.rendered = function () {
var todo = ToDos.findOne({...});

if (todo) {
$('[datepicker]').datepicker('setDate', todo.date);
}
}

我遇到的问题是,当 rendered 被调用时,todoundefined 并且这个函数只被调用一次。有解决办法吗? Deps.autorun 有帮助吗?如果是,怎么办?

另一方面,如果我只能监听ToDos,我就可以在那里更新日期选择器!

最佳答案

是的,这是 Meteor 中一个潜在的恼人问题。本质上,同时处理您的 Meteor.subscribe调用返回有一个 ready方法会告诉你集合是否准备好,通常是你的 rendered回调将在它返回时运行 true ,所以在这种情况下它不是很有用。您可以使用 onReady在某些情况下,在您的订阅调用中回调,如果您知道模板实例存在并在 rendered 中做任何您可以做的事情,甚至可以从其他地方插入模板的数据上下文。回调,但这可能是处理您提出的问题的一种非常困惑的方式(因为如果在 DOM 呈现之前集合已经准备好了,它就会崩溃) .

解决方案:通常情况下,iron router是这里最好的解决方案,因为它允许每条路线都有一个 waitOn回调,您可以使用它来指定哪些订阅需要 ready()在页面开始呈现之前(尽管您可以使用 ready 回调等待任何事情,而不仅仅是订阅)。这样,您始终知道您的 Collection.find将在您的 rendered 时返回您期望的内容回调第一次运行。

关于javascript - Meteor:在 'rendered' 函数中加载集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22717604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com