core-ajax访问使用push()创建的firebase数据

时间:2014-09-25 16:17:14

标签: firebase polymer

首次构建我的应用时,我手动创建了数据,它看起来与此类似:

{
  "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()创建的任何内容,则会再次显示其他项目。

2 个答案:

答案 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/