【问题标题】:Firebase: combine query and child event listenerFirebase:结合查询和子事件监听器
【发布时间】:2018-11-15 14:42:51
【问题描述】:

我有一个类似的结构

{
  posts : {
    post1Key: {
      title : "First Post",
      comments : {
        comment1Key : {},
        comment2Key : {},
        comment3Key : {}
      }
    }
  }
  ...
}

我正在使用键“/posts/post1Key/cmets”上的“子更新”事件来监听新的 cmets。

如何结合 Firebase Query 和事件监听器。

编辑:我知道这可以通过 Firebase 实现,但是,我使用的是 nativescript-plugin-firebase

【问题讨论】:

  • 您能否详细说明您的目标是什么?您所说的“结合 Firebase 查询和事件侦听器”并不清楚您的意思。
  • Firebase 提供了两种从服务器读取数据的方法,一种是查询,另一种是使用事件。查询允许您对这些事件进行排序和过滤等 - 据我所知。我的问题是当我使用事件从服务器获取数据时如何实现排序。

标签: firebase firebase-realtime-database nativescript


【解决方案1】:

您可以很好地结合使用orderBy... 方法定义的Query 和使用on() 方法的侦听器:请参阅详细文档here

例如,你可以做类似的事情

var query = db.ref('node1').orderByChild('firstName');

query.on('value', function(dataSnapshot) {
  dataSnapshot.forEach(function(childSnapshot) {
    var childKey = childSnapshot.key;
    console.log(childKey);
    var childData = childSnapshot.val();
    console.log(childData); 
  });
});

每次在“node1”下添加新的子节点时,您都​​会得到按名字排序的子节点列表

【讨论】:

  • 感谢您的回答。很抱歉,我遗漏了问题的关键部分,我已经编辑了问题并添加了它。我知道这可以通过 Firebase 实现,但是我通过插件 (nativescript-plugin-firebase) 在 nativescript 应用程序中使用 firebase,这似乎根本不可能。
  • @DavidLartey 好的,那我帮不了你....我很想删除我的答案,因为它没有回答你的问题,但我想我不会,因为它可能会帮助那些寻找如何“结合查询和子事件监听器”(你的问题标题)
【解决方案2】:

在撰写本文时,使用 nativescript-plugin-firebase 是不可能的。解决方法是在收到数据后在 eventHandler 中进行排序/过滤。

var onChildEvent = function(result) {
  //
  // Sort: result.value here
  //
};

// listen to changes in the /users path
firebase.addChildEventListener(onChildEvent, "/users").then(
  function(listenerWrapper) {
    var path = listenerWrapper.path;
    var listeners = listenerWrapper.listeners; // an Array of listeners added
    // you can store the wrapper somewhere to later call 'removeEventListeners'
  }
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多