2014-11-17 88 views
0

我在我的HTML(流星Web应用程序):流星延迟加载功能

{{#each GetTasks _id}} 

这将运行每个_id的GetTasks功能(还有另一个在上面的每个循环)。 因此,如果我有5个项目,它将运行GetTasks 5次。每个函数Ge​​tTasks返回类似

return Tasks.find({some query}); 

反正是有延迟GetTasks一些的5倍,例如第三和第四?我要开始为第1,第2和第5展示的信息更快,然后超时后加载关于3rd和4rth的信息(如模仿懒惰延迟加载样式)。 感谢

回答

1

听起来像一个疯狂的要求,但我认为这是可以做到无论用:

  1. 定制,发布收集
  2. 本机无功无功

我想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运行检查,如果你已经设置超时该任务或不
  • 决定是否你想覆盖它,或者离开它

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

另外需要注意的是,在执行过程中我给出的旧任务并没有保留。如果任务的位置可能发生变化,您可能会想要这样做 - 例如,如果任务被删除。然后,您可以测试旧版本与新版本的变化,并决定要做什么。