我在我的html(流星Web应用程序)中:

{{#each GetTasks _id}}


这将为每个_id(每个顶部都有另一个循环)运行GetTasks函数。
因此,如果我有5个项目,它将运行GetTasks 5次。每个函数Ge​​tTasks返回类似

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时,检查是否已经为该任务设置了超时时间
决定是要覆盖它还是保留它


请记住,旧的超时将保留旧的值。如果新运行提供了新值,则旧值可能已过时。

还要注意,在实现中我给出的旧任务没有保留。如果任务的位置可能会更改,例如,如果任务被删除,您可能会希望这样做。然后,您可以测试旧版本与新版本之间的变化,并确定要做什么。

09-07 19:01