如何有条件地绑定到 knockout.js 中的 "valueUpdate"?
How do I conditionally bind to "valueUpdate" in knockout.js?
我目前正在使用 knockout.js 和 knockout.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'。到底是怎么回事?
This 是 Knockout 的 value
绑定的定义。
在第 14 行以上,您将开始看到附加到元素的初始事件处理程序。
'change' 与任何其他定义的处理程序一起附加,例如 valueUpdate
请求的处理程序。
不幸的是(或没有),如您所见,它们在输入初始化期间被获取并执行一次,因此当您尝试更改绑定的值时它没有任何效果,Knockout 中没有任何东西在监视它。
你的第二个例子是当你想动态改变那个绑定参数时的方法,但在你的情况下我认为你没有正确地做。
Knockout-validation 验证器带有一个选项来定义 onlyIf
回调,以允许您进行 run/stop 验证。
你想要做的是在那个 onlyIf
回调中评估一个可观察的,并在你想要的情况下将那个可观察的设置为真(输入模糊或其他任何东西)
onlyIf docs
我目前正在使用 knockout.js 和 knockout.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'。到底是怎么回事?
This 是 Knockout 的 value
绑定的定义。
在第 14 行以上,您将开始看到附加到元素的初始事件处理程序。
'change' 与任何其他定义的处理程序一起附加,例如 valueUpdate
请求的处理程序。
不幸的是(或没有),如您所见,它们在输入初始化期间被获取并执行一次,因此当您尝试更改绑定的值时它没有任何效果,Knockout 中没有任何东西在监视它。
你的第二个例子是当你想动态改变那个绑定参数时的方法,但在你的情况下我认为你没有正确地做。
Knockout-validation 验证器带有一个选项来定义 onlyIf
回调,以允许您进行 run/stop 验证。
你想要做的是在那个 onlyIf
回调中评估一个可观察的,并在你想要的情况下将那个可观察的设置为真(输入模糊或其他任何东西)
onlyIf docs