【问题标题】:Display Firebase data appended with jquery to a table in order按顺序将附加了 jquery 的 Firebase 数据显示到表中
【发布时间】:2018-07-31 18:02:46
【问题描述】:

我目前正在尝试通过从 Firebase 中按最新到最旧帖子的顺序将数据附加到表中。我目前在我的代码库中有以下设置(简化以解决问题):

var theDataRef = new Firebase('https://my-app.firebaseio.com');

theDataRef.orderByChild("timestamp").limitToLast(25).on('child_added', function (snapshot) {
    var message = snapshot.val();
    displaytableRow(message.name, message.text);
}

function displaytableRow(name, message) {

    $("#sch").find('tbody > tr:first')
            .before($("<tr><td><div>" + name + ":" + message + "</div></td></tr>"))
};

我尝试使用 firebase 和 jquery 技术创建一个显示最新到最旧数据的表,但每次我的数据都以随机顺序显示。我的数据中的每条记录也都有一个工作时间戳字段,但即使按此排序也不能解决问题。有没有人有任何成功构建这个的经验?

编辑:

时间戳通过以下代码获取:

var timestamp = Firebase.ServerValue.TIMESTAMP;

而数据库架构的结构是这样的:

【问题讨论】:

  • 你能分享一下你用来按时间戳排序的代码,以及你的数据库结构吗?
  • 根据您的要求更新

标签: javascript jquery firebase firebase-realtime-database


【解决方案1】:

如果您想按最新到最旧的顺序排列帖子,您可以执行以下操作:

1/ 在您的帖子中存储一个与时间戳相反的字段,如下所示:

var tDate = new Date().getTime();
var postData = {
    //.....  
    timestampInverted: (0 - tDate),
    //.....
};

2/ 按此字段排序查询您的帖子如下:

theDataRef.orderByChild("timestampInverted").limitToLast(25).once('value', function(snapshot) {
  snapshot.forEach(function(childSnapshot) {
    displaytableRow(childSnapshot.val().name, childSnapshot.val().text);
  });
});

需要注意的是theDataRef.orderByChild("timestampInverted").limitToLast(25) 返回一个Query,它返回一个DataSnapshot:因此您需要使用snapshot.forEach()(参见文档here)来迭代不同的帖子项。

还要注意“即使查询只有一个匹配项,快照仍然是一个列表;它只包含一个项目。要访问该项目,您始终需要遍历 snapshot”。

【讨论】:

  • 所以这很奇怪,该方法适用于网络模拟器但在设备上无法正常工作,它们仍然是随机顺序
  • 您能否详细说明什么是“网络模拟器”以及您的设备是什么?你的前端不是网络浏览器吗?
猜你喜欢
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 1970-01-01
相关资源
最近更新 更多