带油门的淘汰赛验证

Posted

技术标签:

【中文标题】带油门的淘汰赛验证【英文标题】:Knockout Validation with throttle 【发布时间】:2012-10-27 16:04:42 【问题描述】:

我刚刚注意到使用油门扩展器会导致淘汰赛验证停止工作。有没有办法解决这个问题?

var viewModel = 
    label1: ko.observable('label1').extend(required: true),
    label2: ko.observable('label2').extend(required: true, throttle: 1),
;

ko.applyBindings(viewModel);

jsFiddle:http://jsfiddle.net/rWqkC/

【问题讨论】:

【参考方案1】:

在这种情况下,扩展器的顺序确实很重要,因为 throttle 扩展器返回一个新的 ko.dependentObservable,这就是为什么如果您首先拥有 required,那么它将应用于错误的 observable。

更改顺序,它应该可以工作:

ko.observable('label2').extend(throttle: 500, required: true ),

但是由于没有真正定义按属性声明顺序执行的扩展程序,因此在这种情况下使用两个扩展会更安全:

ko.observable('label2').extend(throttle: 500).extend(required: true )

Demo fiddle.

【讨论】:

你不能依赖声明的顺序,这并没有真正定义。将每个扩展放在单独的extend() 调用中会更安全。【参考方案2】:

对于找到此答案的任何人:

如果您使用的是 3.1.0 之后的 Knockout 版本,请考虑使用 rateLimit extender。 (rateLimit 代替油门)

【讨论】:

以上是关于带油门的淘汰赛验证的主要内容,如果未能解决你的问题,请参考以下文章

淘汰赛验证失败

淘汰赛映射验证

淘汰赛验证异步验证器:这是一个错误还是我做错了啥?

淘汰赛验证:动态约束

淘汰赛验证多个自定义异步规则

出生日期小于 18 的淘汰赛 JS 验证