Есть несколько проблем с тем, как вы написали свой компонент:
Прежде всего, конструктор написан так, чтобы принимать один аргумент, IDString
- но все методы компонента Mithril (включая конструктор) получает объект vnode
, содержащий attrs
и children
, которые передаются через гиперскрипт при вызове компонента. Таким образом, предполагая, что вы вызовете свой компонент следующим образом:
m(answerBox, {IDString: 'answerBox1'})
... тогда вы напишите компонент для получения IDString
в конструкторе следующим образом:
class answerBox {
constructor(vnode){
this.IDString = vnode.attrs.IDString;
следующая проблема заключается в том, что представление answerBox
никогда не изменится после создания экземпляра, поскольку его содержимое вычисляется только один раз в конструкторе, когда определено this.checkButton
. Вместо того, чтобы оценивать представление и назначать его свойству только для вызова этого свойства, просто напишите его непосредственно в функцию представления. Компонент становится следующим:
class answerBox {
constructor(vnode){
this.IDString = vnode.attrs.IDString;
this.isCorrect = false;
}
view(){
var that = this;
return m("button", {
onclick: function(){
that.isCorrect = checkAnswer(that);
console.log(that.isCorrect)
}
},
"Check" + this.IDString + " " + this.isCorrect
);
}
}
Приведенный выше код должен давать ожидаемые результаты!