我正在制作一个可搜索的对象列表(学生)。当我将对象附加到列表时,我还想添加click事件处理程序,它将向我传递对象Id。
我制作了一个可观察的数组:
<script>
self.studentList = ko.observableArray();
// (...) if search conditions are met, add student to array
self.studentList.push(singleStudent);
</script>
它是html:
<tbody data-bind="foreach: studentList">
<tr>
<td><span data-bind='text: $data.Name, click: ClickEvent($data.Id)'></span></td>
</tr>
应该在点击时触发的功能:
<script>
function ClickEvent(pId)
{
console.log(pId);
}
</script>
点击本身很好用。问题是,self.studentList.push(singleStudent)
行还会触发事件。
如果单击元素,我该如何添加仅触发的事件?
答案 0 :(得分:3)
您未正确连接click
处理程序,因为您尚未传入对函数的引用,而是实际执行的结果。
每当解析绑定时,执行其当前形式ClickEvent
,例如,当您向阵列添加新项目时。
要解决此问题,您需要将其包装到匿名函数
<td>
<span data-bind='text: $data.Name, click: function() { ClickEvent($data.Id) }'></span>
</td>
或者您可以使用bind
function:
<td>
<span data-bind='text: $data.Name, click: ClickEvent.bind($data, $data.Id)'></span>
</td>