【发布时间】:2020-09-12 03:37:15
【问题描述】:
我正在创建一个允许用户跟踪新习惯的应用,并使用 Firestore 保存用户的数据。 数据库中存储的数据如下:
- 标题(习惯名称)
- 数(我做了多少次这个习惯)
- 目标(我想每天/每周/每月检查多少次这个习惯)
- Streak(我连续几天/几周/一个月/多少天检查过这个习惯)
我的目标基本上是单击一个对象(在本例中为 #container 中的火焰),并将 count 添加到数据库中。
这就是我现在得到的:
// Real-time listener
db.collection('habits').onSnapshot((snapshot) => {
snapshot.docChanges().forEach(change => {
if(change.type === 'added'){
renderHabit(change.doc.data(), change.doc.id);
}
});
})
// Add new habit
const form = document.querySelector('form');
form.addEventListener('submit', evt => {
evt.preventDefault();
const habit = {
title: form.habitTitle.value,
count: 0,
goal: form.habitGoal.value,
streak: 0
};
db.collection('habits').add(habit)
.catch(err => console.log(err));
form.habitTitle.value = '';
form.habitGoal.value = '';
})
// Update counter
const habitContainer = document.querySelector('.newHabit');
habitContainer.addEventListener('click', evt => {
//console.log(evt);
if(evt.target.tagName === 'I'){
const id = evt.target.getAttribute('data-id');
db.collection('habits').doc(id).update({
count: 1
});
}
});
const habits = document.querySelector('.newHabit');
// Render habit data
const renderHabit = (data, id) => {
const html = `
<div id="wrapper" data-id="${id}">
<div id="container">
<span id="title">${data.title}</span>
<div class="streakContainer">
<span id="streak">${data.streak}</span>
<i data-id="${id}">????</i>
</div>
<div class="countContainer">
<span id="count">${data.count}</span>
<span>/</span>
<span id="goal">${data.goal}</span>
</div>
<div id="progressbar">
<div id="timer"></div>
<div id="progressbaroverlay"></div>
</div>
</div>
</div>
`;
habits.innerHTML += html;
};
我试图声明var countNumber = 0; 最终在// Update counter 内的clickevent 上使用countNumber = countNumber++,这不起作用,因为countNumber 在刷新时再次设置为0(我相信)。
希望我足够清楚:)
谢谢!
【问题讨论】:
-
您的代码中的
countNumber在哪里?您是否在前端使用任何类型的状态容器? -
@jmargolisvt 我已经从我的代码中删除了
countNumber,因为它不起作用,但我在我的 JS 文件的顶部声明了它。
标签: javascript firebase google-cloud-firestore