Как правильно сделать вывод в туду листе?

Приветствую. Я только учу JS и вот добрался до первого пед проекта. А именно заезженного до дыр, туду листа.
Решил я реализовать его следующим способом.
Нужные поля(Заголовок задачи и описание задачи) являються частью объекта со своим ключом. В объекте так же есть ключ/значение id.

Для начального теста я захардкодил одну карточку задачи. И сейчас дело обстоит так. В массиве создаются новые объекты, у каждого уникальные значения включая ID. Но при выводе, первая пара заголовка и тела задачи выводятся как надо. А при каждом добавлении новой задачи ее заголовок и текст просто лепятся к тем, что уже есть.

Может кто-то пожалуйста объяснить, как правильно организовать вывод (карточки можно захардкодить), чтобы в каждой карточке были уникальные заголовок и тело?

Прилагаю ссылки на сам репозиторий и страницу на гитхабе
Страница
Репозиторий
  • Вопрос задан
  • 57 просмотров
Решения вопроса 1
@denisromanenko
Смотри, когда ты перебираешь массив, то вот тут:
arr.forEach(item => {
        outTitle += item.title
        outBody += item.body
    })


Ты не разбиваешь никак массив на карточки, ты пихаешь всё в данные одной карточку по факту, к тому же уже выбранную через card-title, а потом заново отображаешь её, перезаписывая весь HTML в карточке

Чтобы быстро поправить ситуацию, ты сейчас можешь сделать следующее:

Вынеси HTML, отвечающий за карточку, в функцию, ну например cardHTML:
function cardHTML(title, card) {
return ` <div class="card__item">
                <div class="card__header">
                    <p class="title">${title}</p>
                    <div class="header__buttons">
                        <button class="action__button done"><img src="./img/done.svg" alt=""></button>
                        <button class="action__button delete"><img src="./img/delete.svg" alt=""></button>
                    </div>
                </div>
                <div class="card__body">
                    <p class="body__text">${body}</p>
                </div>
            </div>`
}


Это позволит тебе вынести код, собственно формирующий отдельную карточку, удобно в одно место.

А потом по нажатию - не пробегайся по всему массиву туду через forEach, а просто сгенерируй карточку и добавь код в <div class="cards"> через .innerHTML += cardHTML(тут аргументы укажи). Считай это будет как array.push(), только для DOM.

Дальше ты столкнёшься с тем, как тебе с карточками работать дальше. Можешь добавить в этой функции, возвращающей HTML-представление, просто data-id к <div class="card__item" data-id="${id}">, ну и разумеется в параметрах функции надо предусмотреть какой-то id. Потом можно получить из карточки это через dataset: https://developer.mozilla.org/en-US/docs/Web/API/H...

Нежелательно для этого id использовать, например, индекс из самого массива - ты будешь удалять например задачи из массива, а имеющиеся карточки будут ссылаться своими id-шниками на "ужатый" массив. Лучше находи самый большой id в массиве (наверняка будет просто id последнего элемента) и присваивай.

Тогда точно не ошибёшься при поиске элемента в массиве на удаление.

Потом когда сделаешь сохранение данных в localStorage браузера (простейшая вещь), а не просто в текущую память, с помощью такой функции создания HTML тебе будет легко написать функцию первичного заполнения карточек - просто пробежишься так же по массиву и вызовешь функцию cardHTML.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы