【问题标题】:core-ajax accessing firebase data created with push()core-ajax 访问使用 push() 创建的 firebase 数据
【发布时间】:2014-09-25 16:17:13
【问题描述】:

在第一次构建我的应用程序时,我手动创建了数据,它看起来类似于:

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

【问题讨论】:

  • 你用'Polymer'标记了这个,但我没有看到任何Polymer codez...
  • Firebase push 创建地图而不是数组,template repeat 只使用数组。您必须创建一个中间数组或遍历键。
  • 这正是 Firebase 的 AngularFire 为 Angular 所做的事情:当您调用 $asArray() 时,它会从 Firebase 正常使用的有序集合中构造一个数组。 (如果您愿意接受挑战,请参阅github.com/firebase/angularfire/tree/master/src

标签: firebase polymer


【解决方案1】:

您应该使用原生的firebase-element,而不是使用core-ajax 元素。然后,您可以通过将 location 属性分配给您的唯一 Firebase URL 将其与您的数据连接起来,然后使用 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>

这里是参考:http://polymer.github.io/firebase-element/components/firebase-element/

【讨论】:

    【解决方案2】:

    项目没有丢失或删除。事实上,如果您查看您的帐户仪表板,您将看到数字索引和推送 ID。发生的事情与Firebase's handling of array-like data 有关。 (您需要认真阅读才能理解这一点)

    本质上,由于您使用了顺序的数字 ID,因此数据被视为数组并以数组形式返回。但是,当您添加一个字符串作为键时,它会决定这现在是键/值对的散列,并将其视为 pojo/json 数据(正确地如此)。

    我对 Polymer 知之甚少(一无所知),但我猜测该方法接受一个数组并且不迭代对象键。因此,您需要将该数据作为对象而不是数组进行迭代。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 2023-02-01
      • 2022-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多