【问题标题】:Order data in FirebaseFirebase 中的订单数据
【发布时间】:2016-03-30 09:30:09
【问题描述】:

我是 Firebase 的新手,我将根据以下标准构建从服务器收集的项目列表:

  • 最多 10 项
  • 按项目值排序(例如“计数”)

这是我的代码

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

它工作得很好,但是当插入新记录时,如果新项目在前 10 位,是否有一个 Firebase 方法可以检查并自动更新列表?还是我需要自己做?

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
  })
}

【问题讨论】:

  • Firebase 将触发所有必要的事件,以在您的程序中保留最高计数的 10 个项目。但缺少相关代码。您可以在 jsfiddle/jsbin 中重现您的问题并在此处发布链接(和最少的代码)吗?
  • 这是我所做的https://jsfiddle.net/dr99ob8g/。我不想刷新整个列表,所以你能给我一些建议吗?

标签: javascript firebase firebase-realtime-database


【解决方案1】:

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

第一步:当元素已从该位置删除或(在您的情况下)不在查询范围内时,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_changed 和child_moved。而且您可能还想处理回调的第二个参数,它指示孩子需要追求的项目的键。但也许您的用例不需要处理这些情况,在这种情况下,以上就足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2017-09-11
    相关资源
    最近更新 更多