Итак, я создал приложение, в котором вы вводите имя своей любимой книги и автора в форме, и оно генерирует карточку с этой информацией.
В форме есть флажок, чтобы отметить, владеете ли вы ею и кнопку «удалить».
Он работает с функцией addtoLibrary()
, которая берет информацию из формы, помещает ее в объект, а этот объект - в firebase.
Внутри этой функции, У меня есть еще одна функция под названием render()
, которая берет информацию из firebase и помещает ее в DOM.
Затем я добавил еще одну функцию с именем retrievefromDatabase()
, которая также включает функцию render()
, и просматривает список объектов для рисования карт для элементов, которые существуют в базе данных.
Проблема, с которой я сейчас сталкиваюсь, заключается в том, что всякий раз, когда флажок установлен или снят, функция retrievefromDatabase()
активируется и dr aws другая карта .
Думаю, если бы я мог изменить on
во втором вызове базы данных на once
здесь, это решило бы мою проблему. Но когда я это делаю, все поля в моей карточке отображаются как «undefined».
Я не уверен, почему он вообще это делает, потому что исходный вызов базы данных - это once
, который перебирает каждый объект key, и при изменении флажка новые ключи объекта не появляются. Это просто изменение состояния объекта.
function retrievefromDatabase() {
firebase.database().ref("Book").once("value", gotData);
function gotData(Book) {
var books = Book.val();
var keys = Object.keys(books);
for (var i = 0; i < keys.length; i++) {
firebase.database().ref("Book/" + keys[i]).on("value", function(snapshot) {
newPostKey = snapshot.key;
function oldBook(title, fname, lname, pubDate, contrib, own) {
this.title = title;
this.fname = fname;
this.lname = lname;
this.pubDate = pubDate;
this.contrib = contrib;
this.own = own;
};
var archiveBook = new oldBook(snapshot.val().title,
snapshot.val().fname,
snapshot.val().lname,
snapshot.val().pubDate,
snapshot.val().contrib,
snapshot.val().own);
render();
})}}};