【发布时间】:2019-08-10 01:03:46
【问题描述】:
我不知道“单向数据绑定”是否真的是正确的定义,但是我有一个名为timesheetRow 的类,它在调用时表示表中的一行。
该类有一个名为generateRow() 的方法,它将<td> 元素绑定到对象属性,然后将它们全部附加到父<tr> 元素。我这样做是因为在返回行之前,我必须添加一些事件侦听器以进行验证。代码是这样的:
class timesheetRow{
generateRow(){
this.row = htmlToElement(`
<tr>
</tr>
`);
this.nodes.workHours = htmlToElement(`
<td>
<input name="workHours"
min=0
max=24
class="form-control workHours"
type="number">
</td>
`);
this.nodes.workProject = htmlToElement(`
<td>
<select name="workProject"
class="form-control workProject"
required>
<option disabled selected value="">Sin proyecto asignado</option>
<option value="1">Proyecto 1</option>
</select>
</td>
`);
this.nodes.workHours.addEventListener("input", event => {
this.row.querySelector('.workProject').disabled = parseInt(event.target.value) < 1;
});
for (let node in this.nodes) {
this.row.appendChild(this.nodes[node]);
}
return this.row;
}
}
这是实际代码的一个非常精简的版本,但我希望它能澄清我的问题。
如果您查看我添加到 workHours 元素中的事件侦听器,它会直接作用于存储为我的对象属性之一的行,但更改该属性也会自动更改 DOM。所以,据我所知,这看起来像是单向数据绑定。当 workHours 值低于 1 时,workProject 选择元素被禁用。我不是直接更改 DOM,而是更改我的对象。
我想知道这里的幕后情况。提前感谢任何花时间回答我的问题的人!
【问题讨论】:
-
htmlToElement是什么? -
我创建的一个辅助函数,用于使用模板将字符串转换为元素。 @SergiuParaschiv
-
这里没有绑定,只是你存储对Dom节点的引用,..
标签: javascript html class dom ecmascript-6