Вы смешиваете два разных способа добавления контента в DOM. Первый - использование Handlebars для компиляции шаблонной строки HTML в функцию, которая будет возвращать интерполированную строку HTML при передаче объекта контекста данных. Второй - использование document.createElement
для создания узлов DOM, которые будут напрямую вставлены в DOM с помощью таких методов DOM, как .appendChild()
.
Создаваемой вами переменной btn
назначается к нему результат document.createElement("BUTTON")
, который является HTML Button Element Object. Когда вы передаете это своей функции скомпилированного шаблона, Handlebars знает, как попытаться ее преобразовать в строку, чтобы сделать ее частью визуализированного вывода. Когда этот объект является строковым, он выдает «[object HTMLButtonElement]».
Вы можете сделать некоторую неприятную работу, чтобы получить обработанную HTML строку вашего элемента кнопки и передать ее в функцию шаблона, но чем лучше нужно оставить HTMLing для шаблона.
Это будет означать удаление всего вашего кода const btn
и замену этой переменной в вашем шаблоне на HTML.
Поэтому:
<td> {{ change }} </td>
Становится:
<td><button class="remove">remove element</button></td>
Конечно, следующая сложная часть - как связать обработчик щелчков с этими динамически добавляемыми кнопками; но это выходит за рамки этого вопроса.