この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。
BFE.devでのAI解答例 - JavaScript コーディング問題
154. Two-way bindingを実装する
以下が解答例です。
function model(state, element) {
// 初期値の設定
element.value = state.value
// input要素の値が変更されたときの処理
element.addEventListener('input', () => {
state.value = element.value
})
// stateオブジェクトの値が変更されたときの処理
Object.defineProperty(state, 'value', {
get() {
return this._value
},
set(newValue) {
this._value = newValue
element.value = newValue
element.dispatchEvent(new Event('change'))
}
})
}
解説:
model
関数は、state
オブジェクトとelement
オブジェクトを受け取って、二者間の監視を始める関数です。- 初期値の設定は、各
value
プロパティが保持している値をinput
要素のvalue
プロパティに設定することで実装されます。 addEventListener('input')
メソッドが使われているため、ユーザーがinput
要素に入力したときに監視対象とすることができます。Object.defineProperty()
を用いることで、state
オブジェクトのvalue
プロパティの値変更を監視し、element
要素のvalue
プロパティを変更していきます。また、element.dispatchEvent(new Event('change'))
を呼ぶことで、input
要素のchange
イベントを発生させています。