2017-05-25 1 views
1

をクリックして、私は私のFirebaseデータベースから本のリストを表示しています:ボタンをFirebaseデータをソートすると、現在の私のアプリケーション内

Book List

私はときAZアイコン(クリックでイベントがしたいです画像に表示されている)をクリックすると、リストはアルファベット順にソートされます。

コードスニペットは、私がこれまで持っているものを示しています。

var myFirebase = new Firebase('https://project04-167712.firebaseio.com/object/Book/'); 
 

 
const ulList = document.getElementById('list'); 
 
const dbRefObject = firebase.database().ref().child('object'); 
 
const dbRefList = dbRefObject.child('Book'); 
 

 
var sort = document.querySelector('#sort'); 
 

 
sort.addEventListener("click", function() { 
 
    //Where I want the sort event to go 
 
    //So far I have this: 
 
    dbRefList.orderByChild('book').on('child_added', snap => { 
 
     const li = document.createElement('li'); 
 
     li.innerText = snap.val().book; 
 
     li.id = snap.key; 
 
     ulList.appendChild(li); 
 

 
    }); 
 
    //This is taken directly from the child added but changed to orderByChild. 
 
    //It sorts the list but of course just re prints it below the unsorted list. 
 
}); 
 

 
dbRefList.on('child_added', snap => { 
 
     const li = document.createElement('li'); 
 
     li.innerText = snap.val().book; 
 
     li.id = snap.key; 
 
     ulList.appendChild(li); 
 

 
    }); 
 

 
    dbRefList.on('child_changed', snap => { 
 
     const liChanged = document.getElementById(snap.key); 
 
     liChanged.innerText = snap.val().book; 
 

 
    }); 
 

 
    dbRefList.on('child_removed', snap => { 
 
     const liToRemove = document.getElementById(snap.key); 
 
     liToRemove.remove(); 
 
     
 
    });
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> 
 

 
<div id="sortContainer"> 
 
      <i id="sort" class="material-icons">sort_by_alpha</i> 
 
     </div>

私はorderByChild使用する必要があります知っている - 私はちょうど実装するかどうかはわかりません。誰もがリストをソートする最も効率的な方法は、onClickのが何であるかを助言することができます

Sorted list

:私は、ソートリストを行いorderByChildに「child_added」関数を微調整しますが、オリジナルのソートされたリストの下に表示します。ある時点でも、逆順でリストを並べ替えることができるようにしたいと考えています - Z-A - その上の助けも素晴らしいでしょう。ここで

はfirebase JSONファイルのスクリーンショットです: JSON

多くのおかげで、 G

+0

JSON構造の最小スニペットを含むように質問を編集してください。これは、[Firebaseデータベースコンソール](https://console.firebase.google.com/project/_/database/data)の[Export JSON]リンクをクリックすると表示されます。 –

+0

@FrankvanPuffelen – GeorgeBT

+0

新しいアイテムを追加する直前にリストをクリアしようとしましたか?私は、あなたのクリックイベントリスナーの中に 'ulList.innerHTML = '''を追加するとそれが得られると思います。 –

答えて

0

問題はあなたのコードのこの部分である:

dbRefList.orderByChild('book').on('child_added', snap => { 
    const li = document.createElement('li'); 
    li.innerText = snap.val().book; 
    li.id = snap.key; 
    ulList.appendChild(li); 
}); 

あなたが作成しています新しいは未分類のものよりも下にあります。 リストをクリアしてから追加します。

ulList.innerHTML = ''; 

これをsortEventListener関数内に追加します。それは動作するはずです。

+0

あなたの答えAnandをありがとう、しかし、以前の私のコメントで述べたように、このソリューションは、アプリケーションで不具合を引き起こします。それは動作しますが、アプリケーションの他の要素を混乱させる – GeorgeBT

+0

リストコンテナの高さを固定してスクロール可能にするには、いくつかのCSSを使用してください。 –

+0

これは問題ではありません。実際のデータを混乱させて本を複製すると言われているJS – GeorgeBT

関連する問題