我目前使用的是kickout.js和kickout.validation.js插件,在大多数情况下效果都很好。我一直在努力的是让验证在输入模糊时第一次触发,然后在每次击键时每次触发。我真的觉得以下代码应该可以解决这个问题。
<input type="text" class="form-control"
data-bind="value: Name,
valueUpdate: Name.isModified() ? 'afterkeydown' : '',
style: { background: Name.isModified() ? 'red' : 'green'}"
/>
由于某些原因,当isModified()更改时,valueUpdate不会更改为afterkeydown,但是背景颜色确实可以正确更改。 (那一行代码仅用于帮助调试)。
当isModified可观察到的更改导致valueUpdate方法无法正确更新时,我在做什么错了?
编辑:
我想问这个问题可能做得很差。我想知道的是为什么没有此代码:
<input type="text" class="form-control"
data-bind="value: Name,
valueUpdate: Name.isModified() ? 'afterkeydown' : ''"
/>
像这样的代码:
<!-- ko if: Name.isModified() -->
<input type="text"
class="form-control"
data-bind="value: Name, valueUpdate: 'afterkeydown'" />
<!-- /ko -->
<!-- ko if: !Name.isModified() -->
<input type="text" class="form-control" data-bind="value: Name" />
<!-- /ko -->
在我看来,您不能有条件地绑定到“ valueUpdate”属性,并且我无法在任何基因剔除文档中对此进行确认。在第一种情况下,当Name.isModified更新时,valueUpdate不会更改为“ afterkeydown”。到底是怎么回事?
答案 0 :(得分:1)
This是淘汰赛的value
绑定的定义。
在第14+行,您将开始看到附加到元素的初始事件处理程序。
附加了“更改”以及其他任何定义的处理程序,例如valueUpdate
请求的处理程序。
不幸的是,(或不是)您看到它们在输入初始化期间被获取并执行一次,因此,当您尝试更改绑定的值没有任何效果时,Knockout中没有任何东西对其进行监视。
您的第二个示例是您要动态更改该绑定参数的方法,但就您而言,我认为您没有正确执行此操作。
敲除验证器带有定义onlyIf
回调的选项,以允许您运行/停止验证。
您想要做的是在该onlyIf
回调中评估一个可观察值,并在所需的情况下将该可观察值设置为true(在输入模糊或其他情况下)
onlyIf docs