在Firebase中订购数据

时间:2016-03-30 09:30:10

标签: javascript firebase firebase-realtime-database

我是Firebase的新用户,我将构建一个从服务器收集的项目列表,其中包含以下标准:

  • 最多10件
  • 按商品价值排序(例如' count')

这是我的代码

FBRef.orderByChild("count").limitToLast(10).on("child_added", function(snapshot){}

并且它工作正常,但是当插入新记录时,是否有Firebase方法可以检查并自动更新列表,如果新项目位于前10名?或者我自己需要它?

var FBRef = new Firebase('yours.firebaseio.com');
FBRef.orderByChild("count").limitToLast(5).on("child_added", function(snapshot){
    var data = snapshot.val();
  var html = "<li>value: " + data.value + " - count: " + data.count + "</li>";
  $("#result").prepend(html);
});

$(document).ready(function () {
  $("#inputaddbtn").click(add);
});

function add(){
  var value = $("#inputvalue").val();
  var count = $("#inputcount").val();
  $("#inputcount").val("");
  $("#inputvalue").val("");
  FBRef.push({
    value : value,
    count : count
  })
}

1 个答案:

答案 0 :(得分:0)

您需要监控更多事件并处理更多参数以保持列表有限。

作为第一步:当某个元素从该位置移除或(在您的情况下)超出查询范围时,Firebase将触发child_removed事件。

您可以处理该事件以从列表中删除子项:

var FBRef = new Firebase('yours.firebaseio.com');
var query = FBRef.orderByChild("count").limitToLast(5);
query.on("child_added", function(snapshot){
    var data = snapshot.val();
  var html = "<li id='key_"+snapshot.key()+"'>value: " + data.value + " - count: " + data.count + "</li>";
  $("#result").prepend(html);
});
query.on("child_removed", function(snapshot){
  $('#key_'+snapshot.key()).remove();
});

您需要注意的是,我在添加子项时为li提供了一个ID,然后在Firebase告诉我时根据该ID删除了li

这包括简单的添加/删除项目。对于处理所有案例的完整应用,您还应该处理child_changedchild_moved。而且你可能还想处理回调的第二个参数,它指示了孩子需要追踪的项目的关键字。但也许你的用例并不需要处理这些情况,在这种情况下上面就足够了。