【发布时间】:2019-07-01 12:08:46
【问题描述】:
我正在编写一个用于管理轮班工作的应用程序。这个想法很简单:团队在组之间共享。在这些群体中是特定的转变。我想得到这样的东西:
第 1 组
- 班次11
- 班次12
- shift13
第 2 组
- shift21
- shift22
- shift23
我已经进行了一些测试,但没有什么能像我希望的那样真正发挥作用:一切都是反应式的,而且是动态的。
我正在使用 vue.js、firestore(以及它们之间的 vuefire)。
我创建了一个集合“shiftGroup”,其中包含具有字段“名称”和“顺序”(以重新排列显示顺序)的文档(具有自动 ID)和另一个集合“移位”,其中包含字段“名称”的文档(仍然是自动 ID) "、"order"(再次重新排列显示顺序,组内)和"group"(对应shiftGroup的ID。)
我也尝试过使用 firestore.References of shifts in groups,那是我最接近我的目标的时候,但是在尝试对组内的班次进行排序时我被卡住了。
无论如何,使用 vuefire,我可以像这样轻松绑定 shiftGroup:
{
data () {
return {
shiftGroup: [], // to initialize
}
},
firestore () {
return {
shiftGroup: db.collection('shiftGroup').orderBy('order'),
}
},
}
然后像这样显示组:
<ul>
<li v-for="(group, idx) in shiftGroup" :key="idx">{{group.name}}</li>
</ul>
所以现在是时候添加班次了... 我想我可以为每个组获得一系列反应性的班次,就像这样:
{
db.collection('shift').where('group', '==', group.id).orderBy('order').onSnapshot((querySnapshot) => {
this.shiftCollections[group.id] = [];
querySnapshot.forEach((doc) => {
this.shiftCollections[group.id].push(doc.data());
});
});
}
然后我会像这样调用正确的列表:
<ul>
<li v-for="(group, idx) in shiftGroup" :key="idx">
{{group.name}}
<ul>
<li v-for="(shift, idx2) in shiftCollections[group.id]" :key="idx1+idx2">{{shift.name}}</li>
</ul>
</li>
</ul>
这是非常糟糕的代码,实际上,我越想它,我就越认为它是不可能实现的。 当然,我想过使用官方文档中解释的编程绑定:
this.$bind('documents', documents.where('creator', '==', this.id)).then(
但第一个参数必须是字符串,而我需要处理动态数据。
如果有人可以建议我获得我所描述的内容的方法。
非常感谢大家
【问题讨论】:
-
获得什么?这个不清楚。
标签: vue.js google-cloud-firestore nested-queries dynamic-binding vuefire