//过滤并验证用户输入
//例1展示的是写操作的过滤功能,如果你写的值不符合条件的话将不会被写入,忽略所有不包含空格的值
//再多走一步,你可以声明一个监控属性,isValid来表示最后一次写入的是否合法,然后根据真假显示相应的提示信息。
<pre>
<code>
function MyViewModel()
{
this.acceptedNumbericValue =ko.observable(123);
this.lastInputWasValid= ko.observable(true);
this.attemptedValue = ko.computed({
read: this.acceptedNumericValue,
write: function(value){
if(isNaN(value) this.lastInputWasValid(false);
else
{
this.lastInputWasValid(true);
this.acdeptedNumericValue(value); //Write to underlying storage
}
},
owner: this
});
}
ko.applyBindings(new MyViewModel());
<p>Enter a numberic value:<input data-bind="value:attemptedValue" /></p>
<div data-bind="visiblue:!lastInputWasValid()"> That's not a number! </div>
//现在,acceptedNumbericValue 将只接受数字,其它任何输入的值都会触发显示验证信息,而更新acceptedNumbericValue。
//备注:上面的例子显得杀伤力太强了,更简单的方式是在<input> 上使用jQuery Validation和 number class。Knockout可以和
//jQuery Validation一起很好的使用,参考例子:grid editor。当然,上面的例子依然展示了一个如何使用自定义逻辑进行过滤
//和验证数据,如果验证很复杂而jQuery Validation很难使用的话,你就可以用它。
<code>