我正在制作一个简单的应用程序,通知客户其他客户点击了一个按钮.我db使用以下方法将点击存储在Firebase()中:
db.push({msg:data});
Run Code Online (Sandbox Code Playgroud)
所有客户都会收到其他用户的点击通知on,例如
db.on('child_added',function(snapshot) {
var msg = snapshot.val().msg;
});
Run Code Online (Sandbox Code Playgroud)
但是,当页面首次加载时,我想丢弃堆栈中的任何现有数据.我的策略是db.once()在定义之前调用db.on('child_added',...)以获取初始数量的子节点,然后使用它来丢弃该调用的数量db.on('child_added',...).
不幸的是,所有对db.on('child_added',...)的调用都是在我能够获得初始计数之前发生的,所以它失败了.
我怎样才能有效而简单地丢弃初始数据?
Kat*_*ato 25
对于较大的数据集,Firebase现在提供(从2.0开始)一些可以使这更简单的查询方法.
如果我们在每条记录上添加一个时间戳字段,我们可以构造一个只查看新值的查询.考虑这个人为的数据:
{
"messages": {
"$messageid": {
"sender": "kato",
"message": "hello world"
"created": 123456 // Firebase.ServerValue.TIMESTAMP
}
}
}
Run Code Online (Sandbox Code Playgroud)
我们只能在"now"之后使用以下内容找到消息:
var ref = new Firebase('https://<your instance>.firebaseio.com/messages');
var queryRef = ref.orderBy('created').startAt(Firebase.ServerValue.TIMESTAMP);
queryRef.on('child_added', function(snap) {
console.log(snap.val());
});
Run Code Online (Sandbox Code Playgroud)
Rob*_*rco 15
如果我正确理解您的问题,听起来您只需要自用户访问该页面后添加的数据.在Firebase中,您描述的行为是设计的,因为数据总是在变化,并且没有"旧"数据与"新"数据的概念.
但是,如果您只想显示页面加载后添加的数据,请尝试忽略所有事件,直到整个子集已加载至少一次.例如:
var ignoreItems = true;
var ref = new Firebase('https://<your-Firebase>.firebaseio.com');
ref.on('child_added', function(snapshot) {
if (!ignoreItems) {
var msg = snapshot.val().msg;
// do something here
}
});
ref.once('value', function(snapshot) {
ignoreItems = false;
});
Run Code Online (Sandbox Code Playgroud)
此方法的替代方法是编写具有优先级的新项目,其中优先级是Firebase.ServerValue.TIMESTAMP(当前服务器时间),然后使用.startAt(...)当前时间戳的查询.然而,这比上述方法更复杂.
| 归档时间: |
|
| 查看次数: |
5739 次 |
| 最近记录: |