在子值更改事件的回调内部时,添加的子快照中缺少Firebase数据

在子值更改事件的回调内部时,添加的子快照中缺少Firebase数据,firebase,Firebase,当用户“激活”其帐户后,我尝试向用户显示所有用户数据(包括当前用户)时遇到了这个问题。在侦听列表中某个项的onValue更改,然后在回调中侦听该列表的child_added事件时,原始“监视”项的快照中缺少数据 人为复制: var Firebase = require('firebase'); var rootRef = new Firebase('YOUR-FIREBASE-URL'); var userListRef = rootRef.child('users'); // Cleari

当用户“激活”其帐户后,我尝试向用户显示所有用户数据(包括当前用户)时遇到了这个问题。在侦听列表中某个项的onValue更改,然后在回调中侦听该列表的child_added事件时,原始“监视”项的快照中缺少数据

人为复制:

var Firebase = require('firebase');
var rootRef = new Firebase('YOUR-FIREBASE-URL');

var userListRef = rootRef.child('users');

// Clearing the list
userListRef.remove();

// Create a list of users with at least two key/values
var firstUserRef = userListRef.push({name: 'me', active: false});
userListRef.push({name: 'you', active: false});
userListRef.push({name: 'someone', active: false});

// listen for a change to one of the users child data
firstUserRef.child('active').once('value', function(activeData){

    // When the value change callback fires list all of the users data
    userListRef.on('child_added', function(userData){
        console.log(userData.val());
    })

}); 
控制台输出:

{ active: false }
{ active: false, name: 'you' }
{ active: false, name: 'someone' }
姓名数据到哪里去了?这似乎不是预期的行为,也不是同步问题,因为名称数据应该已经在本地设置。如果我们修改代码以检索整个列表对象,如下所示:

// listen for a change to one of the users child data
firstUserRef.child('active').once('value', function(activeData){

    // When the value change callback fires list all of the users data
    userListRef.on('value', function(usersData){
        console.log(usersData.val());
    })

});
所有数据包括:

{ '-J1ayCVS6B_zVterQWJh': { active: false, name: 'me' },
  '-J1ayCVUUAFP0TL77oaO': { active: false, name: 'you' },
  '-J1ayCVUUAFP0TL77oaP': { active: false, name: 'someone' } }

有人知道这里发生了什么吗?

这是错误的,你将一个事件附加到另一个事件中。。没有必要

例如:

cars (parent node)
----- -J1ayCVS6B_zVterQWJh
----- -J1ayCVUUAFP0TL77oaO
----- -J1ayCVUUAFP0TL77oaP
抓住变化

var ref = new Firebase('https://g.com/cars");

ref.on('value', function(snapshot) {
    if (snapshot.val() != null) {

        snapshot.forEach(function(itemDetails) {
            itemDetails.val().username;
            itemDetails.val().active;
        });
    }
});


//and to be serious first attach the event, then you push the records
//assume is a button_click 
var ref2 = new Firebase('https://g.com/cars");

var firstUserRef = ref2.push({name: 'me', active: false});
firstUserRef.push({name: 'you', active: false});
firstUserRef .push({name: 'someone', active: false});

嘿@A-5,我无法复制这个问题。我刚刚运行了你的代码,得到了预期的响应。这个问题还在发生吗?您可以通过npm查看您是否使用最新版本的Firebase吗?嗨@Anant,刚刚确认的问题仍在发生。在OSX 10.8.4上使用节点v0.10.15和Firebase:0.6.3。另外,安装了节点v0.10.20二进制文件,并对其进行了尝试,同样的问题。感谢您的回复,但这并不能解决问题。我知道还有其他方法可以为我发布的代码获得所需的结果,这是一个非常人为的例子,我遇到的情况要复杂得多,但我将问题隔离到上面的示例代码中。我的问题是,我发布的原始代码不应该像我预期的那样工作吗?是Firebase bug,还是我误解了?是的,这是真的,正如我之前所说的*1*您不能将事件嵌入事件*2*首先附加事件,然后进行推送,因此如果您喜欢@event调用其他事件