0

dom-repeat在 Polymer 中使用重复从 Firebase 加载的数组,但我无法弄清楚为什么会出现“项目的预期数组,找到对象”错误,如下面的屏幕截图所示。这是我正在使用的代码:

    <data-firebase data="{{cardsetList}}" requested-location="card-sets"  user="{{user}}"></data-firebase>

    <template is="dom-repeat" items="[[cardsetList]]">
        <paper-card image="../images/trip.png" alt="Donuts" class="amber" >
          <div class="card-content">Test {{index}}</div>
        </paper-card>
    </template>

浏览器视图和控制台

在此处输入图像描述

data-firebase是我创建的一个元素,它从 FB 加载数据,正如您在控制台中成功看到的那样(2 个对象的数组是我想要加载的

加载前的空数组 我检查了加载前我拥有的对象中是否有一些非数组数据,但正如您在控制台中看到的那样,它只是一个空数组。如果我停止从 Firebase 加载数据,也没有错误

Firebase中有意义的数组 我也查了FB中的数据,它表示为一个JSON数组(可以看到导出数据的时候,数据导出在数组括号[]中)

问题:数据已加载但错误仍然 存​​在 dom 重复怎么会发生(如您所见已呈现)并且在控制台中还有一个数组,但我仍然收到此错误?

非常感谢!

亲切的问候,蒂姆

4

3 回答 3

1

我的理解是,firebase 中不支持数组,并且数组以整数作为键名存储为“对象”。

// we send this
['hello', 'world']
// Firebase stores this
{0: 'hello', 1: 'world'} 

看这里:

https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html

这看起来就是你要回来的。

于 2016-12-30T15:31:56.667 回答
0

如果还不晚,为了防止查询,请删除您的路径,稍后当您让您的 auth 对象在 js 中设置您的路径时。因此,您的查询将没有路径,然后在您的标记和身份验证的成功回调中,您设置如下路径。

  signInFb: function() {
    this.$.auth.signInWithRedirect().then(function(response) {
      this.$.yourQueryElementID.path = "your path here" ; 
    }.bind(this)).catch(function(error) {

    }.bind(this));
  },
于 2017-04-16T15:29:33.077 回答
0

我想到了。一开始,用户似乎没有通过 fb-auth 提供足够快的速度。因此,当用户为空时,firebase 会尝试从不存在的位置加载数据,从而创建一个对象。

我添加了以下计算绑定:

功能

     hasContent: function(checkLength) {
         return checkLength.length > 0 ? checkLength : [];
     }

在 HTML 中

<template is="dom-repeat" items="[[hasContent(cardsetList)]]" as="cardItemLoop">
    ...
</template>

但是我可能不得不考虑如何防止在没有提供用户的情况下进行查询/数据绑定。

此外,这似乎指的是解决 #33 之前 的firebase-document默认值{}

于 2016-12-30T17:22:29.930 回答