Firebase-Polymer:从数据变量访问子 Object/Array
Firebase-Polymer: Accessing a sub Object/Array from the data variable
我在我的 Polymer 应用程序中有一个 firebase 登录,然后我从用户目录获取数据并将其存储为数据。在数据中,我有多个子目录("books"、"contacts" 等),在书籍和联系人中,我有多个 Items/Objects(多个 books/contacts):
{
"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"
}
}
}
}
在我的 Web 应用程序中,我有 2 个部分(书籍和联系人),我想用这样的方式遍历所有 books/contacts:
<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}}"
我的书没有显示在我的屏幕上,只有当我将我的书直接放在数据 "node" 下具有唯一 id 时,书才会显示,怎么能我从数据Array/Objects?
访问书籍
您正在使用嵌套数据结构。这将导致 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
代表密钥。它还可以表示安全规则中使用的通配符。
我在我的 Polymer 应用程序中有一个 firebase 登录,然后我从用户目录获取数据并将其存储为数据。在数据中,我有多个子目录("books"、"contacts" 等),在书籍和联系人中,我有多个 Items/Objects(多个 books/contacts):
{
"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"
}
}
}
}
在我的 Web 应用程序中,我有 2 个部分(书籍和联系人),我想用这样的方式遍历所有 books/contacts:
<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}}"
我的书没有显示在我的屏幕上,只有当我将我的书直接放在数据 "node" 下具有唯一 id 时,书才会显示,怎么能我从数据Array/Objects?
您正在使用嵌套数据结构。这将导致 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
代表密钥。它还可以表示安全规则中使用的通配符。