首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何有条件地绑定到knockout.js中的"valueUpdate“?

如何有条件地绑定到knockout.js中的"valueUpdate“?
EN

Stack Overflow用户
提问于 2018-08-07 02:53:27
回答 1查看 188关注 0票数 0

我目前使用的是knockout.js和knockout.validation.js插件,它们在大多数情况下都能很好地工作。我一直在努力的是让验证在输入模糊时第一次触发,然后每次按键触发。我真的觉得下面的代码应该可以解决这个问题。

代码语言:javascript
复制
<input type="text" class="form-control"
       data-bind="value: Name, 
           valueUpdate: Name.isModified() ? 'afterkeydown' : '',
           style: { background: Name.isModified() ? 'red' : 'green'}" 
/>

由于某些原因,当isModified()更改时,valueUpdate不会更改为afterkeydown,但背景颜色确实会像我预期的那样正确更改。(这行代码只是为了帮助调试)。

我做错了什么,使valueUpdate方法在isModified可观察到的变化时无法正确更新?

编辑:

我想我在问这个问题时可能做得不好。我想知道的是为什么这段代码没有:

代码语言:javascript
复制
<input type="text" class="form-control"
       data-bind="value: Name, 
           valueUpdate: Name.isModified() ? 'afterkeydown' : ''"
/>

如下代码所示:

代码语言:javascript
复制
<!-- 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”。怎么一回事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-07 22:39:24

This是Knockout的value绑定的定义。在14+行,您将开始看到附加到元素的初始事件处理程序。‘'change’与任何其他定义的处理程序一起附加,如valueUpdate请求的处理程序。

不幸的是(或者不是)正如您所看到的,它们在输入初始化期间被获取并执行一次,所以当您尝试更改绑定的值时,它没有任何影响,Knockout中的任何东西都不会监视它。

您的第二个示例是当您想要动态更改绑定参数时的方法,但在您的示例中,我认为您的操作不正确。

Knockout-validation验证器附带了一个定义onlyIf回调的选项,允许您运行/停止验证。您想要做的是在onlyIf回调中计算一个可观察值,并在所需的情况下将该可观察值设置为true (在输入模糊或任何其他情况下) onlyIf docs

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51713973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档