Я хотел создать список настроек, которые пользователь может изменить в HTML процедурно через javascript.
Примерно так: Quality:
-
0
+
Мой подход к этому заключался в создании класса Option
со свойством value
и методов prev()
и next()
, которые изменяют значение в пределах своего диапазона. Я расширяю этот класс, чтобы он мог быть Range
, Bool
и т. Д. Это работает нормально.
Моя проблема в том, что я не могу включить это в HTML. Мое текущее решение работает только для последней созданной опции, другие не запускают функции события onclick
, и даже если бы они это сделали, я не чувствую, что это правильный подход. Как я могу сделать эту работу элегантным способом?
Я попробовал решение, показанное в этом вопросе , но оно не позволяет мне получить доступ к экземпляру класса с this
.
class UIManager {
constructor (wrapperID, settings) {
this.wrapper = document.getElementById(wrapperID)
this.settings = settings
}
updateUI () {
this.wrapper.innerHTML = ``
for (let id = 0; id < this.settings.options.length; ++id) {
let option = this.settings.options[id]
this.wrapper.innerHTML += `
<li>
<div class="label">
${option.name}
</div>
<div class="option">
<input id="prev${id}" class="open" type="button" value="<">
${option.value}
<input id="next${id}" class="close" type="button" value=">">
</div>
</li>
`
let prevButton = document.getElementById(`prev${id}`)
let nextButton = document.getElementById(`next${id}`)
prevButton.onclick = _ => {
this.settings.options[id].prev()
this.updateUI()
}
nextButton.onclick = _ => {
this.settings.options[id].next()
this.updateUI()
}
}
}
}