我的html(流星网络应用程序):
{{#each GetTasks _id}}
这为每个_id运行GetTasks函数(顶部还有另一个循环)。 所以,如果我有5个项目,它将运行GetTasks 5次。每个函数GetTasks都返回类似
的内容return Tasks.find({some query});
有没有延迟GetTasks 5次中的一些,例如第3和第4次?我想开始更快地显示第1,第2和第5的信息,然后在超时后加载关于第3和第3的信息4rth(就像模仿懒惰延迟的负载风格)。 感谢
答案 0 :(得分:1)
听起来像是一个疯狂的要求,但我认为这可以通过以下方式完成:
我认为2.可能更容易,所以我会试着描述一下。
//...
GetTasks: function (id) {
// Establishes reactive dependency
var tasks = Tasks.find({some query}).fetch();
// Use empty object as initial values
var reactives = tasks.map(function (task) { return new ReactiveVar(task); });
// Now reactives[0] corresponds to task 1, reactives[1] to task 2, etc.
// Unset any values you want to appear later:
reactives[3].set({});
reactives[4].set({});
// Schedule them to be set later (using 5 seconds here)
Meteor.setTimeout(function () {
reactives[3].set(task[3]);
reactives[4].set(task[4]);
}, 5000);
return reactives.map(function (r) { return r.get(); });
}
每次从服务器发布任务数据时都会运行,并且它与您的查询匹配。这意味着您每次都会设置超时。
您可能想要做的是:
请记住,旧的超时将保留旧值。如果新运行提供新值,则旧值可能是陈旧的。
还要注意,在我给出的实现中我没有保留旧任务。如果任务的位置可能发生变化,您可能希望这样做 - 例如,如果删除了任务。然后,您可以测试旧与新的变化,并决定要做什么。