2016-11-03 28 views
0

我試圖使用Firebase V3延遲加載項目。我的數據已經是denormalized,但我想更進一步。防止在Firebase中延遲加載時加載重複項

到目前爲止,我嘗試使用查詢過濾出數據.limitToLast()如下:

var limitLength = 20; 
var orderNode = "price"; 

firebase.database().ref(refPath).orderByChild(orderNode).limitToFirst(limitLength).on('value', function(snapshot) { 
    //success: snapshot.val() 
}, function(error){ 
    //error 
}); 

的問題是,當我增加長度40,火力地堡將刷新第一20項,以及。當limitLength增加時,這顯然會傷害我的表現。

這怎麼能克服?即我如何才能加載地點21 ... 40的數據?

回答

1

你不能告訴查詢跳過前20項。但你可以告訴它開始在一個特定的項目。有了這個,你可以完成幾乎同樣的事情,不同的是你如何實現它和連續查詢對之間的單個重疊項。

var limitLength = 20; 
var orderNode = "price"; 
var latestKey, latestProp; 

var location = firebase.database().ref(refPath); 
var query = location.orderByChild(orderNode).limitToFirst(limitLength); 
query.on('value', function(snapshot) { 
    snapshot.forEach(function(child) { 
     latestKey = child.key; 
     latestProp = child.val()[orderNode]; 
    }); 
    query = location.orderByChild(orderNode).startAt(latestProp, latestKey).limitToFirst(limitLength+1); 
}, function(error){ 
    //error 
}); 
+0

謝謝,這很有道理!另一件事,雖然...是否有可能扭轉.orderByChild()的排序?也許應該是一個單獨的問題。 – JohnAndrews

+1

這確實是一個單獨的問題。不要發佈它,但搜索:已被問及已經回答了好幾次。 –

+0

這是令人難以置信的簡單..替換.limitToFirst與.limitToLast! – JohnAndrews