Firebase-Polymer:从数据变量访问子对象/数组

时间:2015-10-02 08:26:21

标签: firebase polymer

我在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的数据“节点”下才会显示图书时,我该如何访问图书数据数组/对象?

1 个答案:

答案 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代表密钥。它还可以表示安全规则中使用的通配符。