我在Polymer App中有一个firebase登录,然后我从users目录获取数据并将其存储为数据。在数据中我有几个子目录(“书籍”,“联系人”等),在书籍和联系人中我有几个项目/对象(几本书/联系人):
{
"users" : {
"google:117487344423952031114" : {
"books" : {
"kjsdkk" : {
"author" : "Edward",
"id" : 11,
"language" : "English",
"original" : "Shakeout"
},
sdlsjdksjhdkjh" : {
"author" : "Olaf",
"id" : 11,
"language" : "Deutsch",
"original" : "BlaBlaBla"
},
"x,kshdkjha" : {
"author" : "Don",
"id" : 10,
"language" : "Latin",
"original" : "Carpe diem"
}
},
"contacts" : {
"sadjköljds" : {
"email" : "bob@gmail.com",
"name" : "Bob",
"phone" : "+01 34566646467456"
},
"xölmödlkdcls" : {
"address" : "First Street, 2",
"name" : "Robert",
"phone" : "+49 646415664"
}
}
}
}
在我的网络应用程序中,我有2个部分(书籍和联系人),我希望以某种方式遍历所有书籍/联系人:
<template is="dom-repeat" items="{{data.books}} as="book">
<tr on-tap="_openBookDialog">
<td>{{book.id}}</td>
<td>{{book.author}}</td>
<td>{{book.original}}</td>
<td>{{book.language}}</td>
<td>{{book.status}}</td>
</tr>
</template>
但是,当我致电items="{{data.books}}"
时,我的图书没有显示在我的屏幕上,只有当我将我的图书直接放在具有唯一ID的数据“节点”下才会显示图书时,我该如何访问图书数据数组/对象?
答案 0 :(得分:2)
您正在使用嵌套数据结构。这将导致Firebase必须加载user/$uid
下面的所有内容。
尝试将您的数据结构重构为更平坦的内容。
{
"users": {
"google:117487344423952031114": {
"name": "some name"
}
},
"usersBooks": {
"google:117487344423952031114": {
"kjsdkk": {
"author": "Edward",
"id": 11,
"language": "English"
}
}
},
"userContacts": {
"google:117487344423952031114": {
"sadjköljds" : {
"email" : "bob@gmail.com",
"name" : "Bob",
"phone" : "+01 34566646467456"
}
}
}
}
现在,您只需循环浏览/userBooks/$uid/$bookid
即可获取该用户的图书。同样适用于联系人。
这种结构是扁平的。您可以独立检索节点而无需加载不需要的数据。
如果您不知道$key
代表密钥。它还可以表示安全规则中使用的通配符。