Firebase Push ID和Polymer dom-repeat - 如何保持双向数据绑定到子属性?

时间:2017-01-02 15:48:03

标签: object firebase data-binding polymer polymerfire

我在以下设置中使用Firebase和Polymer:

火力地堡-数据

正如您所看到的,有几个用户使用其用户ID并在列表卡集下方。这基本上是一个数组,但存储为对象,因为我想使用firebase push id,因为这可能会变成协作。 enter image description here

聚合物代码

使用聚合物我使用dom-repeat来迭代项目(只要我使用静态数组就能很好地工作。

    <template is="dom-repeat" items="{{dataCardSet.card-items}}">
       <el-card-editor card-item="{{item}}"></el-card-editor>
    </template>

问题

众所周知,dom-repeat需要一个数组,但是当我使用push-id时,Firebase会给我一个Object。使用数组并将其存储到Firebase不是一个选项(例如[0:abc,1:def])。 此外,我需要保持双向数据绑定

尝试过的解决方案

(1)One way data binding - Alternative 1

(2)One way data binding - Alternative 2

(3)Two way data binding

如上所述,(1)和(2)是没有选择的。 (3)实际上正在工作,但是使用这个解决方案,如果我只更新一个子属性,它会更新对象中的所有子属性。这会强制dom-repeat重新初始化元素。我正在使用<paper-input>元素,因此在按下一个键后它会失去焦点。

(4)同样使用(1)oder(2)然后手动绑定到子属性是不可能的,因为没有办法使用动态索引绑定(例如{{dataCardSet.card-items。索引}}

(5)我也尝试在array-selector中使用dom-repeat,但是我遇到同样的问题,我无法动态创建数据绑定。

需要支持

我需要一种方法来保持双向数据绑定,保持dom-repeat和使用push-ID。 我实际上感到惊讶和失望,因为Firebase被广告宣传但后来没有使用Polymer框架作为标准。

Rob Dodson对Polycast上的代码GitHub给出的印象是这很容易,但是查看代码时,它正在使用数组和推送ID,如图所示视频。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这就是我在类似项目中解决问题的方法。

使用int color_arr[] = {R.color.colorAccent, R.color.colorPrimary, R.color.colorPrimaryDark}; int rnd = new Random().nextInt(color_arr.length); linearLayout.setBackgroundResource(color_arr[rnd]);

控制数组

使用firebase-query

控制对象

示例代码

firebase-document内,使用属性template is="dom-repeat"绑定到as="item"的值。将item.$key添加到path="{{item.$key}}

el-card-editor element
使用<template is="dom-repeat" items="{{dataCardSet.card-items}}" as="item"> <el-card-editor card-item="{{item}}" path="{{item.$key}}></el-card-editor> </template> 中的值的

el-card-editor元素构造了元素{{item.$key}}的对象的路径。

路径示例:users / user.uid / card-sets / card-sets.key / card-items / card-items.id

firebase-document

关于聚合物团队

我们不要忘记,他们是一个很小的团队,非常努力地发布聚合物2.0以及新的演示和教程。它应该在2017年第一季度全部上市。