ObservableArray.push()触发点击事件

ObservableArray.push() triggers click event

本文关键字:事件 push ObservableArray      更新时间:2024-05-19

我正在制作一个可搜索的对象(学生)列表。当我把对象附加到列表中时,我还想添加点击事件处理程序,它会把对象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)行也触发了该事件。

如何添加只有在元素被单击时才会触发的事件?

您没有正确连接click处理程序,因为您没有传入对函数的引用,而是传入了实际执行的结果。

在其当前形式中,ClickEvent在每次解析绑定时执行,例如在向数组添加新项时。

要修复它,你需要将它包装成一个匿名函数

<td>
  <span data-bind='text: $data.Name, click: function() { ClickEvent($data.Id) }'></span>
</td>

或者您可以使用bind功能:

<td>
  <span data-bind='text: $data.Name, click: ClickEvent.bind($data, $data.Id)'></span>
</td>

另请参阅文档中的:访问事件对象,或传递更多参数