【问题标题】:Knockout foreach binding calling click event while iteration迭代时淘汰foreach绑定调用click事件
【发布时间】:2015-08-17 09:00:23
【问题描述】:

我正在使用淘汰赛的 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>

从代码 sn-p 可以看出,我正在使用一些 css 绑定,并将模态弹出对话框绑定到单元格单击事件。

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

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

【问题讨论】:

  • 可能给我们一个小提琴重现你的情况。尝试这样做 click:function(){ $root.changeEditObj(id, $parent.Id)} 而不是 $root.changeEditObj(id, $parent.Id) 。欢呼

标签: javascript asp.net-mvc knockout.js


【解决方案1】:

谢谢Chaim。我不小心删除了他的答案。

我变了

click: $root.changeEditObj(id, $parent.Id)

click: $root.changeEditObj.bind(this, id, $parent.Id)

它解决了这个问题。

这也很好用:

click: function{$root.changeEditObj(id, $parent.Id)}

可以在here找到更多信息

【讨论】:

  • 根据documentation,正确的语法是click: $root.changeEditObj.bind($data, id, $parent.Id)
猜你喜欢
  • 2016-11-15
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 2013-03-14
  • 2014-01-10
  • 2013-09-10
  • 2022-10-17
  • 1970-01-01
相关资源
最近更新 更多