如何在javascript中的构造函数中使用模板文本

abithluo  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(367)

我正在构建一个待办事项列表应用程序,对oop和javascript有一个问题。我想在构造函数中创建一个值来保存我的 taskBody 它包含由输入值或本地存储的最终填充指定的html和模板文本。我的目标是在两个单独的函数中重复使用这个html,但我仍然坚持使用模板文本。

class Task {
  constructor() {
    let taskValue //Initializing a variable

    this.taskBody = `<div class="task">
    <span>${taskValue}</span> //Template Literal
      <span class="actions">

        <a class="edit-button" title="Edit Task">Edit</a>
        <button class="complete-button" title="Complete Task"><i class="fas fa-check"></i></button>

      </span>
    </div>`;

  }

  addTask = () => {
    //Prevent empty task
    if (this.input.value == "") {
      this.setPlaceholder("Please Enter A Task");
      return;
    }

    this.taskValue = this.input.value; //Trying to reassign taskValue to the input value

    this.results.innerHTML += this.taskBody; //Trying to grab the HTML from the constructor and populate with taskValue able

    ls.setLS(this.taskValue); //setting the Local Storage the Task Value, which works
  };

}

如果在待办事项列表中键入“stack overflow”,则会在html和本地存储中填充“stack overflow”,但是,它只在本地存储中填充。todo项未定义、为空或为空。
我试过使用 this.taskValue , let taskValue = "" ,及 let taskValue = null ,但我得到了上面描述的结果。我错在哪里,更具体地说,我如何在不同的函数中重用html?
这是一个代码笔,您可以在其中看到问题:
代码笔

rseugnpd

rseugnpd1#

当您第一次示例化 Task ,则 this.taskBody 设置如下:

<div class="task">
    <span>undefined</span>
    <span class="actions">

        <a class="edit-button" title="Edit Task">Edit</a>
        <button class="complete-button" title="Complete Task"><i class="fas fa-check"></i></button>

    </span>
</div>

具有 undefined 值,因为在示例化时 taskValue 没有定义。
如果您的待办事项列表项目是动态添加的(情况是这样的),那么考虑一个能够实现动态替换的功能,例如:

getTaskBody = item => `<div class="task">
    <span>${item}</span>
    <span class="actions">

        <a class="edit-button" title="Edit Task">Edit</a>
        <button class="complete-button" title="Complete Task"><i class="fas fa-check"></i></button>

    </span>
</div>`;

然后在第123行中使用它,而不是:

this.results.innerHTML += this.taskBody;

做:

this.results.innerHTML += getTaskBody(this.taskValue);

相关问题