【发布时间】:2020-08-30 02:03:06
【问题描述】:
我正在尝试了解如何使用类来按用途划分我的功能。
我正在使用类构建一个待办事项列表应用程序。 (我知道这可能不是类的理想用例,但仍然想习惯使用类)
我用 todoList 和 todos 的构造函数创建了一个 CreateTodoList 类来存储数据。
所以 addTodo 基本上将从 eventHandler 接收到的文本带到 todos(array) 并使用 addtoList(text) 创建一个 DOM 元素。
在 CreateTodoList 类之外,我创建了另一个名为“Events”的类,它将处理来自用户输入的所有事件。所有这一切都是调用 addTodo 函数传递用户输入值。
我尝试了很多方法来让它工作,但似乎类内部的任何东西都无法识别外部的变量,我也无法使用 CreateTodoList.eventListener 引用另一个类方法。
您能指出下面的代码有什么问题,并解释一下它是如何工作的吗? 提前致谢。
const add = document.querySelector('#btn_add');
let addInput = document.querySelector('#add');
const form = document.querySelector('#form');
class CreateTodoList {
constructor(list) {
this.todoList = list;
this.todos = [];
}
addtoList(text) {
let checkboxEl = document.createElement('span');
checkboxEl.classList.add('round');
let checkboxEl2 = document.createElement('input');
checkboxEl2.id = 'checkbox';
checkboxEl2.type = 'checkbox';
let checkboxEl3 = document.createElement('label');
checkboxEl3.htmlFor = 'checkbox';
checkboxEl.appendChild(checkboxEl2);
checkboxEl.appendChild(checkboxEl3);
let todoTextEl = document.createElement('input');
todoTextEl.value = text;
todoTextEl.disabled = true;
todoTextEl.classList.add('edit_input');
todoTextEl.id = 'edit_input';
todoTextEl.type = 'text';
todoTextEl.name = 'edit_input';
let todoTextEl2 = document.createElement('label');
todoTextEl2.htmlFor = 'edit_input';
let editEl = document.createElement('i');
editEl.classList.add('far');
editEl.classList.add('fa-edit');
let deleteEl = document.createElement('i');
deleteEl.classList.add('far');
deleteEl.classList.add('fa-trash-alt');
let dateEl = document.createElement('small');
dateEl.textContent = timeago.format(new Date());
let liEl = document.createElement('li');
liEl.appendChild(checkboxEl);
liEl.appendChild(todoTextEl);
liEl.appendChild(todoTextEl2);
liEl.appendChild(editEl);
liEl.appendChild(deleteEl);
liEl.appendChild(dateEl);
let list = document.querySelector('ul');
list.appendChild(li);
return liEl;
}
addTodo(text) {
this.todos.push(text);
this.todoList.appendChild(CreateTodoList.addtoList(text));
}
class Events{
add.eventHandler('click', (e) => {
e.preventDefault();
let userText = document.querySelector('#userInput').value;
CreateTodoList.addTodo(userText);
});
}
【问题讨论】:
标签: javascript class oop dom