Как я могу получить объект из Firebase для прямого использования? - PullRequest
0 голосов
/ 02 августа 2020

У меня есть несколько полей ввода, которые я использую для преобразования в объект, а затем использую этот объект для рендеринга в карточку.

Я научился .push или .set объект в Firebase, измените значения и удалите всю карту.

Но теперь я хотел бы иметь возможность отображать все объекты, существующие в моей Firebase, для всех, кто открывает приложение. Как мне это сделать?

Данные выглядят следующим образом:

project-library-7e667
    - Book
        - MDXCUa-3s5yX-Iv8u7X
            contrib: "Me"
            fname: "Albert"
            lname: "Camus"
            own: false
            pubDate: "1942"
            title: "L'Etranger"

Карты отрисовываются после того, как пользователь вводит информацию с помощью function addBookToLibrary(), который использует функцию обратного вызова render() вот так:

function addBookToLibrary() {
  let title = document.querySelector("#title").value;
  let fname = document.querySelector("#fname").value;
  let lname = document.querySelector("#lname").value;
  let pubDate = document.querySelector("#pubDate").value;
  let contrib = document.querySelector("#contrib").value;
  let own = document.querySelector("#own").checked;
  var addBook = new Book(title, fname, lname, pubDate, contrib, own);
  newPostKey = firebase.database().ref().child('Book').push().key;
  firebase.database().ref().child('Book').child(newPostKey).set(addBook);
  render();
  form.reset();
};

function render() {
  const bookContainer = document.createElement("div");
  bookContainer.classList.add("book-container");

  const newVolume = document.createElement("div");
  newVolume.classList.add("volume");
  bookContainer.appendChild(newVolume);
  bookContainer.setAttribute('id', `${newPostKey}`);

  const frontCover = document.createElement("div");
  newVolume.appendChild(frontCover);
   
  let TitleRef = firebase.database().ref('Book/' + newPostKey + '/title');
  TitleRef.on('value', function(snapshot) {
  titlesnap = snapshot.val();
  });

  ...

  frontCover.innerHTML = "<br /><br />"
                        + "<b>" + titlesnap + "</b>" + "<br /><br />" 
                        + fnamesnap + "&nbsp;"
                        + lnamesnap + "<br /><br />"
                        + "Published: " + pubsnap + "<br />"
                        + "Added by: <br />" + contribsnap + "<br />";

  ...

Если я позвоню render() по тому, что существует в базе данных, какие должны быть параметры?

Я знаю, что мне, вероятно, придется сделать for l oop, но это не похоже ни на одну из этих работ:

render(MDXCUa-3s5yX-Iv8u7X);

render(firebase.database().ref().child('Book').child('MDXCUa-3s5yX-Iv8u7X'));

Надо ли sh выйти и добавьте все аргументы, например:

let TitleRef = firebase.database().ref('Book/' + newPostKey + '/title');
  TitleRef.on('value', function(snapshot) {
  titlesnap = snapshot.val();
  });

, а затем создайте из них объект для передачи в render()?

Честно говоря, я немного запутался в понимании, какие аргументы render() на самом деле использует . console.log(arguments) дал мне конструктор, а console.log(arguments[0]) дал мне undefined. Как бы я это нашел в противном случае?

...