我在我的html(流星Web应用程序)中:
{{#each GetTasks _id}}
这将为每个_id(每个顶部都有另一个循环)运行GetTasks函数。
因此,如果我有5个项目,它将运行GetTasks 5次。每个函数GetTasks返回类似
return Tasks.find({some query});
无论如何,是否有5次延迟GetTasks的时间,例如第3次和第4次?我想开始更快地显示第1次,第2次和第5次的信息,然后在超时后加载有关第3次和第4r次的信息(例如模仿延迟延迟加载样式)。
谢谢
最佳答案
听起来像是一个疯狂的要求,但是我认为可以通过以下任一方法来完成:
定制的已发布收藏
本地无功变量
我认为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(); });
}
每当从服务器发布任务数据并与您的查询匹配时,此操作就会运行。这意味着您将设置每次超时。
您可能想做的是:
跟踪设置了哪些超时
每次运行GetTasks时,检查是否已经为该任务设置了超时时间
决定是要覆盖它还是保留它
请记住,旧的超时将保留旧的值。如果新运行提供了新值,则旧值可能已过时。
还要注意,在实现中我给出的旧任务没有保留。如果任务的位置可能会更改,例如,如果任务被删除,您可能会希望这样做。然后,您可以测试旧版本与新版本之间的变化,并确定要做什么。