2014-11-17 182 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運行檢查,如果你已經設置超時該任務或不
  • 決定是否你想覆蓋它,或者離開它

請記住舊的超時將保留舊的值。如果新運行提供新值,則舊值可能過時。

另外需要注意的是,在執行過程中我給出的舊任務並沒有保留。如果任務的位置可能發生變化,您可能會想要這樣做 - 例如,如果任務被刪除。然後,您可以測試舊版本與新版本的變化,並決定要做什麼。