Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.12.2020, 00:17
Интересующийся
Отправить личное сообщение для seven8959 Посмотреть профиль Найти все сообщения от seven8959
 
Регистрация: 10.11.2020
Сообщений: 20

to do list mvc удаление и редактирование элементов
Ребята, добрый вечер. Нужна помощь. Пока учусь, не все понимаю.
Не могу понять как реализовать в to do list, удаление элемента, и редактирование в шаблоне MVC. После нажатия на кнопку SHOW, появляется список, состоящий из элементов li. И при нажатии на Х этот конкретный элемент удаляется, а при нажатии на Edit, его можно отредактировать, при этом перерисовывается страница, без перезагрузки. Желательно эти методы сделать вторым шаблоном MVC, что бы разделить как минимум между вьюшкой на более мелкие задачи.
Заранее всем спасибо.
На данный момент, я что то упустил, так как событие вот это this.view.spanDelete.addEventListener('click', this.removeList); выдает undefined.

class View {
  constructor() {
    this.input = document.createElement('input');
    this.addButton = document.createElement('button');
    this.mainBlock = document.querySelector('#app');
    this.taskList = document.createElement('ul');
    this.showButton = document.createElement('button'); 
    this.returnButton = document.createElement('button');          
  }
 
  initRender() {
    this.mainBlock.append(this.input, this.addButton, this.showButton);
    this.addButton.innerHTML = 'ADD';
    this.showButton.innerHTML = 'SHOW';
  }
 
  renderTask(task) {
    this.item = document.createElement('li');
    this.buttonEdit = document.createElement('button');             
    this.spanDelete = document.createElement('span');
    this.item.innerHTML = task; 
    this.buttonEdit.innerHTML = 'Edit';
    this.spanDelete.innerHTML = 'X';
    this.buttonEdit.classList.add('edit');
    this.taskList.appendChild(this.item);
    this.item.append(this.buttonEdit, this.spanDelete);
    this.input.value = '';
  }
 
  showTask() {                                                      
    this.mainBlock.append(this.returnButton, this.taskList);
    this.mainBlock.style.display = 'block';
    this.returnButton.innerHTML = 'RETURN';                        
    this.showButton.remove();
    this.addButton.remove();
    this.input.remove();
  }
 
  returnTasks() {                                                  
    this.returnButton.remove()
    this.initRender();
    this.taskList.remove();
    this.mainBlock.style.display = 'flex';
  }
 
  removeTasks() {
    this.item.remove();
  }
}
 
 
class Controller {
  constructor(model, view) {
    this.model = model;
    this.view = view;
    this.returnPage = this.view.returnTasks();
  }
 
  addData = () => {
    let value = this.view.input.value;
    this.model.addTask(value);
    this.view.renderTask(value);
  }
 
  showList = () => {                                                
    this.view.showTask();
  }
 
  returnData = () => {                                              
    this.view.returnTasks();
  }
 
  removeList = () => {
    this.view.removeTasks();
  }
 
  addHandle() {
    this.view.addButton.addEventListener('click', this.addData);
    this.view.showButton.addEventListener('click', this.showList);      
    this.view.returnButton.addEventListener('click', this.returnData);  
    this.view.spanDelete.addEventListener('click', this.removeList);
  }
}
 
 
class Model {
  constructor() {
    this.tasks = [];
  }
 
  addTask(value) {
    this.tasks.push(value);
    localStorage.setItem('value', JSON.stringify(this.tasks));
  }
 
}
 
 
(function init() {
  const view = new View();
  const model = new Model();
  const controller = new Controller(model, view);
  view.initRender();
  controller.addHandle();
})();


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
<body>
 
<div class="wrapper">
    <div class="appList">
        <h1>TO DO List</h1>
        <div id="app"></div>
    </div>
</div>
 
</body>
 
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 06.12.2020, 01:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

seven8959,
spanDelete нет в строке 81, кнопка возникает только после строки 62!!!
и уберите знаки равно из class Controller, смотреть синтаксис функций в class View
и на всякий случай везде нужен .bind(this) в addEventListener.
для примера. (код ниже правильный, но не рабочий)
addData() {
        let value = this.view.input.value;
        this.model.addTask(value);
        this.view.renderTask(value);
        this.view.spanDelete.addEventListener('click', this.removeList.bind(this));
    }
Ответить с цитированием
  #3 (permalink)  
Старый 06.12.2020, 02:09
Интересующийся
Отправить личное сообщение для seven8959 Посмотреть профиль Найти все сообщения от seven8959
 
Регистрация: 10.11.2020
Сообщений: 20

рони,
Вы имеите вввиду знаки равно в классе Model, во во всех методах? Вот это addData = () => и showList = () => и т.д, или я не правильно понял. Если это оно, то это и есть привязка к контексту.

А насчет того, что кнопки spanDelete нет в строке 81, я понимаю, что я ее где то упусти, в том то и дело, что я где то логику упустил, и теперь не пойму что куда нужно писать.
Ответить с цитированием
  #4 (permalink)  
Старый 06.12.2020, 15:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

seven8959,
на всякий случай
https://javascript.ru/forum/misc/791...tml#post517918

на форуме есть несколько тем по To Do List, надо искать, лучше через Google.
Ответить с цитированием
  #5 (permalink)  
Старый 06.12.2020, 16:05
Интересующийся
Отправить личное сообщение для seven8959 Посмотреть профиль Найти все сообщения от seven8959
 
Регистрация: 10.11.2020
Сообщений: 20

рони,
Спасибо большое.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление элементов массива у другого массива _marisha Общие вопросы Javascript 8 31.03.2020 07:19
Удаление и восстанавелние элементов (jquery) saper333 Общие вопросы Javascript 12 26.11.2015 15:23
Удаление и восстанавелние элементов (jquery) saper333 Общие вопросы Javascript 5 23.11.2015 15:50
Удаление элементов из массива Noin Javascript под браузер 3 18.07.2015 17:37
Удаление элементов через splice. возможно ли оптимизировать? Storan Общие вопросы Javascript 0 01.10.2011 21:16