我在以下设置中使用Firebase和Polymer:
火力地堡-数据
正如您所看到的,有几个用户使用其用户ID并在列表卡集下方。这基本上是一个数组,但存储为对象,因为我想使用firebase push id
,因为这可能会变成协作。
聚合物代码
使用聚合物我使用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
如上所述,(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,如图所示视频。
感谢您的帮助!
答案 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年第一季度全部上市。