- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了这个处理程序来监视正在创建的新子项。这个小技巧阻止 child_added 事件在每次页面加载时触发我的代码。相反,它只会在实际添加内容时触发。
// Listen for new rooms being created
var first_room_added_after_load = true;
this._roomRef.endAt().limit(1).on('child_added', function(snapshot){
if (first_room_added_after_load) { // we want to skip the first room, because it will already exist
first_room_added_after_load = false;
return;
}
else {
this._onCreateRoom(snapshot);
}
}, this);
就是说,当我在 _roomRef 中的一个节点上调用 remove() 时,就会为一个已经存在的节点触发 child_added。关于为什么以及如何阻止它的任何提示?
我还应该提到,这似乎只有在我删除列表中已经存在的其他内容之后创建的内容时才会发生。如果我先删除旧项目,则不会触发 child_added。
最佳答案
您似乎认为 endAt()
使用时间戳进行比较,因此它只返回新的 child 。但这根本不是它的工作原理。来自Firebase documentation for endAt
:
If no arguments are provided, the ending point will be the end of the data.
使用您的代码:
this._roomRef.endAt().limit(1)
您正在创建一个设置为始终返回单个子项的查询。条件是子项是在您创建查询后创建的。
查询就像 Firebase ref 中子节点上的滑动窗口:它总是(最多)包含一个子节点,该子节点是在您创建查询后创建的。
假设您在创建查询时有这些 child :
child1
child2
child3 <!-- last child present when creating the endAt() query -->
通过使用 endAt
查询将在 child3
之后“ Root ”。因此它不会为 child1
、child2
和 child3
触发任何事件。
假设您添加了一个新 child :
child1
child2
child3 <!-- last child present when creating the endAt() query -->
child4
查询将为 child4
生成一个 child_added
事件。
现在如果我们添加另一个 child :
child1
child2
child3 <!-- last child present when creating the endAt() query -->
child4
child5
查询将为 child4
触发 child_removed
并为 child5
触发 child_added
。请注意,child4
实际上并没有从您的 Firebase 中删除,它只是从查询结果中消失了(因为您要求将结果数限制为一个)。
当我们现在删除最新的孩子时,我们最终得到:
child1
child2
child3 <!-- last child present when creating the endAt() query -->
child4
查询将为 child5
触发 child_removed
并为 child4
触发 child_added
。这又是因为您的查询设置为始终(最多)包含一个在 child3
之后添加的节点。
您似乎只想为新添加的 child 获取一次 child_added
。在这种情况下,我不会在查询中使用 limit
,而是将创建房间的时间戳设置为优先级:
this._roomRef.push({
/* whatever properties you need for a room */,
'.priority': Firebase.ServerValue.TIMESTAMP
})
然后您可以简单地以该优先级开始查询。
this._roomRef.startAt(Date.now()).on('child_added', ...
关于javascript - child_added 在删除后被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25235283/
运行这两个代码应该有什么区别吗? ref.on('child_added',function(child,prev){ console.log(child.key+prev); } ref.off(
我有相当大的数据集,可能有数百万个对象,我需要触发 child_added 事件并获取最后添加的子项。但是,每当我启动服务时,它都会为数据集中的每个初始子项触发一次事件。 如何避免这种行为? 编辑:
来自 Firebase API: Child Added: This event will be triggered once for each initial child at this locat
我正在使用 Firebase 开发 HTML5 移动消息传递应用程序。我遇到了一个我无法解决的问题。该应用程序有多个 channel (聊天室)。当一条消息第一次添加到一个 channel 时,它按预
我的应用现在可以运行了,但我不确定它为什么运行... 我有一些类似的代码: var itemRef; listRef.on('child_added', function(childSnapshot,
我有一个大型数据集(约 10 万个条目),正在使用“child_added”事件进行订阅。使用 Node 7 和 firebase 3.6.1,这样做似乎会在触发单个 child_added 事件之前
我创建了这个处理程序来监视正在创建的新子项。这个小技巧阻止 child_added 事件在每次页面加载时触发我的代码。相反,它只会在实际添加内容时触发。 // Listen for new roo
我正在将 Firebase 和 Node 与 Redux 一起使用。我正在从一个键加载所有对象,如下所示。 firebaseDb.child('invites').on('child_added',
我必须从 Firebase 读取大量数据(约 3000 个子项和约 1.5 MB),如果我可以向用户显示下载的内容,那就太好了。因此,我决定使用 child_added 来显示它们中的每一个,但它并没
首先,我不确定是否存在真正的问题,但我想我会分享我的推理。 我使用 Firebase 作为数据库/后端,用于归档来自家里各种传感器的所有数据,并在托管中使用带有炫酷图形的 UI。因此,每 10 分钟我
我有一个 post 列表,我正在使用 .on('child_add') 获取它们,问题是我只想获取 post 是在添加项目时发布的,而不是在删除项目时发布的,但是,似乎 .on('child_adde
我有一个指向 privateMessages 的引用,如下所示: messagesRef: firebase.database().ref("privateMessages") 下面是 /privat
我想在推送时从 firebase 数据库获取最近添加的子节点,但根本不是数据库的最后一个子节点。 问题是典型的 child_added 事件无论如何都会获取最后一个子元素,即使是在第一次加载页面时也是
我有一个案例需要获取所有 event 对象。每个 event 对象都有一个属性 city_id,它是与所有 cities 列表中的单个 city 对象的关系键>. ... |- events | |
对于我的 Firebase 云功能,我正在尝试添加最后一个子项目,以便继续执行该项目的任务。我的结构是这样的: -Tips -TipsId -Safe
我正在使用 Angular2、ionic2 和 firebase 开发聊天应用程序。为了获得聊天,我尝试了以下方法 Controller 代码: displayAllMessage() { l
我有一个网站,用户可以通过选择菜单中的项目来下订单。 它的设置是为了让您按下菜单页面上的“下订单”按钮 http://www.waipahe.co.uk/takeaway/menu.html 然后已下
我有一个应用程序,我想在其中加载一些初始数据(使用 Firebase.once('value') 完成),然后在稍后的某个时候我想接收事件已添加到该 Firebase 引用的子节点的数量。 为此,我想
我在同一条路径上有 2 个“限制”查询。我首先加载“limit(1)”,然后加载“limit(50)”。 当我加载第二个查询时, child_ added 事件不会按顺序触发。相反,列表中的最后一项(
当用户“激活”其帐户后,尝试向用户显示所有用户数据(包括当前用户)时,我遇到了此问题。当监听列表中某个项目的 onValue 更改,然后在回调中监听该列表的 child_added 事件时,原始“监视
我是一名优秀的程序员,十分优秀!