我已经走了一个兔子洞,因为我认为那是微不足道的。目的是通过节流阀来验证用户输入的内容。
根据我所读的内容,我需要使用purecomputed
可观察的对象,并使用rateLimit
进行扩展。或类似的东西:
this.validateSmsValue = ko.pureComputed(function() {
let hasPlaceholder = self.smsMsg().indexOf('[link_placeholder]');
self.smsMsgIsValid(hasPlaceholder !== undefined);
})
.extend({
rateLimit: { method: "notifyWhenChangesStop", timeout: 500 }
});
在HTML中,我尝试与以下内容绑定:
<input id="smsMsgEdit"type="text" data-bind="textInput: smsMsg, event: {keypress: validateSmsValue}" maxlength="160" >
在当前形式下,我收到错误Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.
我将继续阅读文档并搜索示例,但我的Google-fu无法使我失望。
一旦用户停止输入1/2秒,验证用户在文本字段上输入的正确KnockoutJS方法是什么?
答案 0 :(得分:2)
我认为您正在寻找的是对可观察对象的订阅,而不是使用计算函数。也不需要单独的按键事件绑定。
function viewModel(){
var self = this;
self.myValue = ko.observable().extend({ rateLimit: { timeout: 500, method: "notifyWhenChangesStop" } });
//validate
self.myValue.subscribe(function(newValue){
console.log(!isNaN(newValue));
});
}
ko.applyBindings(new viewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
Value is a number?
<input type="text" data-bind="textInput: myValue" />