延迟流星功能加载

时间:2014-11-17 12:46:49

标签: javascript meteor

我的html(流星网络应用程序):

{{#each GetTasks _id}}

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

的内容
return Tasks.find({some query});

有没有延迟GetTasks 5次中的一些,例如第3和第4次?我想开始更快地显示第1,第2和第5的信息,然后在超时后加载关于第3和第3的信息4rth(就像模仿懒惰延迟的负载风格)。 感谢

1 个答案:

答案 0 :(得分:1)

听起来像是一个疯狂的要求,但我认为这可以通过以下方式完成:

  1. 自定义的已发布集合
  2. 本地反应变量
  3. 我认为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运行时检查您是否已经为该任务设置了超时
    • 决定是否要覆盖它,或将其保留

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

    还要注意,在我给出的实现中我没有保留旧任务。如果任务的位置可能发生变化,您可能希望这样做 - 例如,如果删除了任务。然后,您可以测试旧与新的变化,并决定要做什么。