首次构建我的应用时,我手动创建了数据,它看起来与此类似:
{
"data": {
0: {
"author": "gracehop",
"title": "Announcing COBOL, a New Programming Language"
},
1: {
"author": "alanisawesome",
"title": "The Turing Machine"
}
}
}
我可以使用core-ajax检索数据,并在没有问题的情况下迭代自定义组件,如下所示:
<template is="auto-binding">
<core-ajax id="ds" auto url="https://mysite.firebaseio.com/data.json" response="{{data}}"></core-ajax>
<my-items items="{{data}}"></my-items>
</template>
但是,现在我正在尝试使用push()在我的应用中创建新数据。问题是新数据如下所示:
{
"data": {
"-JRHTHaIs-jNPLXOQivY": {
"author": "gracehop",
"title": "Announcing COBOL, a New Programming Language"
},
"-JRHTHaKuITFIhnj02kE": {
"author": "alanisawesome",
"title": "The Turing Machine"
}
}
}
这与their documentation对齐,表示
你的第一直觉可能是使用set()来存储孩子 自动递增整数索引... Firebase提供了push() 每次添加新子项时生成唯一ID的函数 指定的Firebase参考。通过为每个使用唯一的子名称 列表中的新元素,几个客户端可以添加相同的子元素 位置同时不用担心写冲突。该 push()生成的唯一ID基于时间戳,因此列出项目 将按时间顺序自动订购。
推完一两件物品后,我不再在列表中看到任何物品。如果我删除使用push()创建的任何内容,则会再次显示其他项目。
答案 0 :(得分:1)
项目不会丢失或删除。实际上,如果您查看了帐户信息中心,则会同时看到数字索引和推送ID。发生的事情与Firebase's handling of array-like data有关。 (你会想要认真阅读这一点)
基本上,由于您已使用顺序数字ID,因此数据被视为数组并作为数组返回。但是当你添加一个字符串作为键时,它决定它现在是键/值对的散列并将其视为pojo / json数据(正确地说是这样)。
我对Polymer的了解不多(但没有),但我猜测该方法接受一个数组并且不迭代对象键。因此,您需要将该数据迭代为对象而不是数组。
答案 1 :(得分:1)
您应该使用原生core-ajax
,而不是使用firebase-element
元素。然后,您可以将location
属性分配到唯一的Firebase网址,然后使用data
属性访问数据,从而将其与您的数据相关联。同样,如果您对循环数据感兴趣,则需要访问keys
属性,因为Polymer目前只迭代数组。
你的firebase元素看起来像这样:
<firebase-element id="base" location="https://YOUR.firebaseio.com/"
data="{{data}}" keys="{{keys}}"></firebase-element>
然后你会这样访问它:
<template repeat="key in keys">
<p>This is your uniqueId generated keys: {{keys}}</p>
<p>This is the data in the keys: {{data[key]['author']}}</p>
</template>
这是ref:http://polymer.github.io/firebase-element/components/firebase-element/