1

我在表格中有一个复选框列。我只想在用户单击复选框时触发事件。但是,在我的情况下,即使在绑定表行时,偶数也会被触发。

视图模型上的事件

 self.UpdateData = function (item, value) {               
                $.ajax({                       
                })
            });

这就是我绑定它的方式。

 data-bind="checked: flag, click: $root.UpdateData($parent.RowNumber(), flag())" 

谁能告诉我为什么UpdateData()在渲染表格行时触发事件?

4

1 回答 1

2

首先,Knockout 不允许您为click绑定提供表达式。如果您有兴趣以这种方式绑定,请查看我的Knockout.Punches插件。如果不是,则必须将表达式包装在匿名函数中:

click: function() { $root.UpdateData($parent.RowNumber(), flag()); }

其次,这样做之后你会发现另一个问题。您的click处理程序将阻止更改复选框,因为默认情况下,Knockout 会阻止事件绑定时的默认行为。要启用默认行为,您需要return true在函数中添加:

click: function() { $root.UpdateData($parent.RowNumber(), flag()); return true; }

第三,我建议您尽量避免click使用复选框添加绑定。你已经有了checked绑定,它用复选框的状态更新了一个 observable。您还可以选择绑定checked到数组,在这种情况下,它会从数组中添加或删除复选框的值:

data-bind="attr: {value: $parent.RowNumber()}, checked: $root.selectedRows"
于 2013-09-26T03:36:04.710 回答