在迭代时敲除foreach绑定调用click事件

Izz*_*iev 5 javascript asp.net-mvc knockout.js

我正在使用knockout的foreach来绘制具有可点击单元格的表格第一列和表格标题用于表格中的填充值.

 <tbody>
        <!--ko foreach: $root.schedules -->
        <tr>
            <td data-bind="text: FromTo "></td>
            <!-- ko foreach: $root.weekdays -->
            <td data-bind="css:{selected:$root.objectForEdit().isSelected(id, $parent.Id) }, click: $root.changeEditObj(id, $parent.Id), with: $root.getDetailsModel(id, $parent.Id)">
                <span data-bind="text: lesson"></span>
            </td>
            <!-- /ko -->
        </tr>
        <!--/ko-->
    </tbody>
Run Code Online (Sandbox Code Playgroud)

从代码片段可以看出,我正在使用一些css绑定,并将模式弹出对话框绑定到单元格点击事件.

表是按预期绘制的,一切正常,但第一次表单加载时我的模态表单弹出即使没有单元格点击发生.我试图弄清楚为什么会发生这种情况,并发现内部迭代淘汰不仅是绑定点击事件,而且还调用了click事件的处理函数(显示弹出窗口).

我假设问题是淘汰赛绑定.这个问题有什么解决方案吗?如何在foreach迭代中避免函数调用?

Izz*_*iev 6

谢谢 Chaim.我不小心删了他的回答.

我改变了

click: $root.changeEditObj(id, $parent.Id)
Run Code Online (Sandbox Code Playgroud)

click: $root.changeEditObj.bind(this, id, $parent.Id)
Run Code Online (Sandbox Code Playgroud)

它解决了这个问题.

这也很好:

click: function{$root.changeEditObj(id, $parent.Id)}
Run Code Online (Sandbox Code Playgroud)

有关这方面的更多信息,请点击此处