2017-03-16 13 views
0

Geofireの緯度/経度座標を使用してFirebaseに保存されているユーザーの周辺の近くの場所を取得するアプリがあります。Geofire + Infinite Scroll - それは働くことができますか?

ユーザーが場所のリストの下部にスクロールすると、より多くの場所を取得できるようになりました(別名スクロール)。

これを行うには、半径を増やして、より多くの場所を取得しますが、既にロードされている同じ場所を取得しないようにしたいと思います。 Geofireはこれをサポートしていますか(つまり、クエリ内の既に読み込まれた場所を除外しています)、またはこれを何らかの手動処理で処理する必要がありますか?

ご了承ください。

答えて

1

Geofireは、常にジオクエリの範囲内にあるすべてのキーを返します。ですから、ますます広い範囲でジオクエリを作成すると、オーバーラップするキーが得られます。

しかし、Geofireのキーは非常に小さく、通常、キーが表す実際のオブジェクトよりもずっと小さいです。したがって、すでに読み込んだオブジェクトを再読み込みしないようにしておけば、まだ実行可能である可能性があります。

1

すでに得られた結果に対して新しい結果セットを作成し、新しいキーと値のペアのみを処理したいとします。これはarray.filterメソッドを使用して実現できます。だから、本当にバニラjs。私は次のように新しい場所を追加達成することができましたjavascriptのソリューション、純粋なバニラを使用して

+0

ありがとう、私はトリックを効率的にやっていると思われるバニラソリューションを思いついた。私はまもなく投稿します –

0

$scope.locations = ... // returned from service method 
var existingKeys = []; // keep track of existing firebase keys 

$scope.locations.forEach(function(location){ // Store the initial location ids 
    existingKeys.push(location.id); 
}); 

locationService.getNearby(5) // Set 3km as the new radius (was 2km) 
    .then(function(moreLocations){ 
    moreLocations.forEach(function(newLocation){ 

    /** Prevents pushing duplicates into array by comparing the existing keys **/ 
    if(existingKeys.indexOf(newLocation.id) === -1){ 
     $scope.locations.push(newLocation); 
     existingKeys.push(newLocation.id); // Append new keys to existingKeys[] 
    } 
}) 

*これはないを行うには、同じオブジェクトをリロードすると、倍の量をxは防ぐ

関連する問題