我正在编写一个用于管理轮班工作的应用程序。这个想法很简单:团队在组之间共享。在这些群体中是特定的转变。我想得到这样的东西:
组 1
- shift11
- shift12
- 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(
但是第一个参数必须是一个字符串,而我需要使用动态数据。
如果有人可以建议我获得我所描述的内容的方法。
非常感谢大家