【发布时间】:2017-10-13 07:27:15
【问题描述】:
我正在尝试延迟加载 Firebase 项目,以便稍后在用户到达 div 容器末尾时加载更多项目。当我删除 .endAt() 和 .startAt() 时,我收到了 15 个项目,尽管它们没有增加并且卡在这 15 个项目上。
当我保留 .endAt() 和 .startAt() 时,我收到了 Firebase 警告
Using an unspecified index. Consider adding ".indexOn": "title" at /items 即使设置了 .indexOn。我对那个警告感到困惑。提前感谢您的帮助。
Firebase 结构
{
"items" : {
"-Kk6aHXIyR15XiYh65Ht" : {
"author" : "joe",
"title" : "Product 1"
},
"-Kk6aMQlh6_E3CJt_Pnq" : {
"author" : "joe",
"title" : "Product 2"
}
},
"users" : {
"RG9JSm8cUndpjMfZiN6c657DMIt2" : {
"items" : {
"-Kk6aHZs5xyOWM2fHiPV" : "-Kk6aHXIyR15XiYh65Ht",
"-Kk6aMTJiLSF-RB3CZ-2" : "-Kk6aMQkw5bLQst81ft7"
},
"uid" : "RG9JSm8cUndpjMfZiN6c657DMIt2",
"username" : "joe"
}
}
}
安全规则
{
"rules": {
".read": true,
".write": "auth != null",
"users":{
"$uid": {
".write": "$uid === auth.uid"
"items":{
".indexOn": "title",
"$itemId": {
"title": {".validate": "...}
"type": {".validate": "...}
}
}
}
}
}
}
}
延迟加载的代码结构
let _start = 0,
_end = 14,
_n = 15;
function lazyLoadItems(){
firebase.database().ref('items')
.orderByChild('title')
.startAt(_start)
.endAt(_end)
.limitToFirst(_n)
.on("child_added", snapshot=> console.log(snapshot.val()));
_start += _n;
_end += _n;
}
【问题讨论】:
-
您正在查询
/items,同时您向/users/$uid/items添加了索引。 -
嗯,是的,虽然我想列出所有用户的所有项目,所以在没有
uid的情况下查询/users/$uid/items将无法完成这项工作。在"rules"中添加.indexOn('items')没有意义。会不会是结构不好的规则? -
您分享的内容无法说明这一点。 JSON 的最小 sn-p 可能会有所帮助。您可以通过单击Firebase Database console 中的“导出 JSON”链接来获取此信息。
-
在哪里
items===decks。 pastebin.com/wskVaNPy -
我将 JSON 添加到问题中。但是那里没有
/items。请提供一个MCVE (阅读链接,了解为什么这是一种比我们一直有的来回寻求帮助更有效的方式)。
标签: javascript firebase firebase-realtime-database firebase-security