计算表中的记录显然是一种手动操作,直到你们已经在工作中获得一些漂亮的新功能;)
但是,我甚至坚持使用.on('value',...)手动运行来获取计数:
var table = new Firebase('http://beta.firebase.com/user/tablename');
var count = 0;
table.on('child_added', function(snapshot) {
count++;
// how do I know if this is the last child? i.e. the count is complete?
});
// when is it okay to use count?
Run Code Online (Sandbox Code Playgroud)
我预见到任何类型的分页都会出现同样的问题,我觉得我对此有点束缚.我错过了什么?
这基本上是错误的模式,例如,获取用户在他/她的队列中的消息数量?
使用"child_added"时,无法知道您何时收到"最后"项目.如果您想要计算在特定时间点存在的所有孩子,我建议使用"值"事件,如下所示:
var table = new Firebase('http://beta.firebase.com/user/tablename');
table.on('value', function(snapshot) {
var count = 0;
snapshot.forEach(function() {
count++;
});
//count is now safe to use.
});
Run Code Online (Sandbox Code Playgroud)
child_added事件没有"完成"的概念,因为随着时间的推移,孩子可以继续添加.如果你想获得孩子的数量,现在,你可以用"价值"从那个位置的当前快照,再算上孩子.例如:
table.once('value', function(snapshot) {
var count = 0;
snapshot.forEach(function(childSnapshot) {
count++;
});
// do something with count.
});
Run Code Online (Sandbox Code Playgroud)
或者,如果您希望计数不断更新,则可以使用.on()而不是上面的.once().但这并不是理想的表现,因为你每次都会计算所有的孩子.幸运的是,您可以结合使用'child_added'和'value'来有效地保持计数:
var count = 0;
table.on('child_added', function(snapshot) {
count++;
// how do I know if this is the last child? i.e. the count is complete?
});
table.on('value', function(snapshot) {
// do something with count.
});
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为"值"将在"初始"数据完成后触发一次,然后在数据发生变化时再触发,因此您将获得不断更新的正确计数.如果你希望孩子被移除,你也需要处理child_removed.
| 归档时间: |
|
| 查看次数: |
6968 次 |
| 最近记录: |