我正在尝试使用firebase中的push方法从firebase中读取数据。
以下是我做dat的方法:
var wishRef = new Firebase('https://burning-fire-1723.firebaseio.com/WishList');
wishRef.push({'user_id': user.email, 'text': wish});
正确插入。根据文档,我正在尝试根据电子邮件读取数据,如下所示:
new Firebase("https://burning-fire-1723.firebaseio.com/WishList")
.startAt('italespinner@gmail.com')
.endAt('italespinner@gmail.com')
.once('value', function (snap) {
console.log('accounts matching email address', snap.val())
});
但我得到的只是空。这是DEMO
答案 0 :(得分:2)
这是你小提琴的代码:
new Firebase("https://burning-fire-1723.firebaseio.com/WishList")
.startAt('rodddy57@gmail.com')
.endAt('rodddy57@gmail.com')
.once('value', show);
function show(snap) {
console.log(snap.val());
$('pre').text(JSON.stringify(snap.val(), null, 2));
}
这是Firebase中WishList的数据结构:
{
"-JQnCbOF1MNdvKUCdDNB": {
"text": "Climb Hill",
"user_id": "rodddy57@gmail.com"
},
"-JQnDG8uWWB167BSSEEI": {
"text": "Deep Sea Diving",
"user_id": "italespinner@gmail.com"
},
"-JQnDT7w1-K7VSnZNkVI": {
"text": "KICK",
"user_id": "italespinner@gmail.com"
}
}
看起来您使用the Firebase push
function添加了这些节点。此函数将为您添加的节点生成唯一名称。这样做的好处是您不必担心提出一个独特的名称。一个缺点是你无法控制生成的名称:这是一个毫无意义的模糊。
问题在于您使用startAt
和endAt
的方式。 documentation for startAt说:
使用优先级和可选的子名称指定起点。如果没有提供参数,则起点将是数据的开头。
您传递给startAt
的值既不是优先级,也不是Firebase中的名称。
如果您对startAt
和endAt
发表评论,您会看到所有值都显示在pre
中:
new Firebase("https://burning-fire-1723.firebaseio.com/WishList")
.once('value', show);
function show(snap) {
console.log(snap.val());
$('pre').text(JSON.stringify(snap.val(), null, 2));
}
一种解决方案是在添加数据时将电子邮件地址指定为优先级值。请参阅setPriority和setWithPriority。
要在现有节点上设置优先级,我在你的小提琴中执行了这个功能:
function setPriorities() {
var list = new Firebase("https://burning-fire-1723.firebaseio.com/WishList");
list.on('child_added', function(snap) {
list.child(snap.name()).setPriority(snap.val().user_id);
});
}
它循环遍历WishList的所有子节点,并为每个子节点设置优先级。请注意,您只需要运行此功能一次,它只是为已经存在的数据添加优先级。通常,您在添加元素时指定优先级,因此以后不需要修复它。
如果你现在重新访问你的小提琴,你会发现它有效。