ObservableArray.push()触发click事件

时间:2016-04-12 10:22:40

标签: javascript knockout.js

我正在制作一个可搜索的对象列表(学生)。当我将对象附加到列表时,我还想添加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)行还会触发事件。

如果单击元素,我该如何添加仅触发的事件?

1 个答案:

答案 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>

另见文档:Accessing the event object, or passing more parameters