Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js 敲除验证验证可观察组错误_Knockout.js_Knockout Validation - Fatal编程技术网

Knockout.js 敲除验证验证可观察组错误

Knockout.js 敲除验证验证可观察组错误,knockout.js,knockout-validation,Knockout.js,Knockout Validation,我有一组项目需要整体验证。我在组上设置了一个validatedObservable,但没有显示错误消息 我这里有一个简化的例子。我希望每个数字在0-100之间,总和正好是100。我如何处理这种验证 更新:我知道在这个例子中,我可以做一个ko.computed并验证它,但这不是我需要的 例如: 0-100: 0-100: ko.validation.rules['mustEqual']={ 验证器:函数(val,otherVal){ 返回(parseInt(val.num1())+parseInt

我有一组项目需要整体验证。我在组上设置了一个
validatedObservable
,但没有显示错误消息

我这里有一个简化的例子。我希望每个数字在0-100之间,总和正好是100。我如何处理这种验证

更新:我知道在这个例子中,我可以做一个
ko.computed
并验证它,但这不是我需要的

例如:

0-100:
0-100:
ko.validation.rules['mustEqual']={ 验证器:函数(val,otherVal){ 返回(parseInt(val.num1())+parseInt(val.num2())==otherVal; }, 消息:“总计必须等于{0}” }; ko.validation.registerExtenders(); var viewModel={ num1:ko.observable(“50”).extend({number:true,min:0,max:100}), num2:ko.observable(“50”).extend({number:true,min:0,max:100}) }; viewModel.isValidSum=ko.validatedObservable({ num1:viewModel.num1, num2:viewModel.num2 }).extend({mustEqual:100}); 应用绑定(视图模型);
检查这把小提琴,我已经实现了总和验证。


我认为问题在于您不能在
验证可观察的
上使用
扩展

检查此小提琴,我已经实现了总和验证。


我想问题是你不能在
validatedObservable
上使用
extend
,我需要在
text:isValidSum.error
上绑定,而不是
text:isValidSum.errors()
。另外,看起来您必须绑定
visible:!执行此操作时,isValidSum.isValid()

因此,我的解决方案如下所示:

例如:

0-100:
0-100:

我需要绑定
文本:isValidSum.error
而不是
文本:isValidSum.errors()
。另外,看起来您必须绑定
visible:!执行此操作时,isValidSum.isValid()

因此,我的解决方案如下所示:

例如:

0-100:
0-100:

在Chrome中,我可以看到“请输入一个小于或等于100的值”。如果我输入大的数字…这些错误消息针对每个数字。我还需要验证组。每个数字必须介于0-100之间,且总和必须等于100。我更新了这个示例,因为它有缺陷。在Chrome中,我可以看到“请输入一个小于或等于100的值”。如果我输入大数字…这些错误消息针对每个数字。我还需要验证组。每个数字必须介于0-100之间,且总和必须等于100。我更新了这个例子,因为它有缺陷。虽然这似乎是可行的,但我不认为这是它的目的它的示例显示,您应该将validatedObservable调用的结果作为根VM传递给applyBindings…但我无法开始工作,请参见。你还有什么顿悟吗?我有顿悟。自从我在这里发布了我的答案(库版本)和我不再使用的解决方案后,情况发生了变化。我发布了一个类似的问题,我认为我对图书馆现在的状况有了更好的答案(ko 3.4,kv 2.0.3)。虽然这似乎是可行的,但我不认为这是我们想要做的它的示例显示,您应该将validatedObservable调用的结果作为根VM传递给applyBindings…但我无法开始工作,请参见。你还有什么顿悟吗?我有顿悟。自从我在这里发布了我的答案(库版本)和我不再使用的解决方案后,情况发生了变化。我发布了一个类似的问题,我认为我对图书馆有一个更好的答案,就像今天的图书馆一样(KO3.4,Kv2.0.3)。
0-100:<input data-bind="value: num1, valueUpdate: 'afterkeydown'"/><br>
0-100:<input data-bind="value: num2, valueUpdate: 'afterkeydown'"/><br>
<span class="validationMessage" data-bind='text: isValidSum.errors()'></span>

ko.validation.rules['mustEqual'] = {
    validator: function (val, otherVal) {
        return (parseInt(val.num1()) + parseInt(val.num2())) == otherVal;
    },
    message: 'total must equal {0}'
};
ko.validation.registerExtenders();

var viewModel = {
    num1: ko.observable("50").extend({ number: true, min: 0, max: 100 }),
    num2: ko.observable("50").extend({ number: true, min: 0, max: 100 })
};

viewModel.isValidSum = ko.validatedObservable({
                            num1: viewModel.num1,
                            num2: viewModel.num2
                        }).extend({ mustEqual: 100 });

ko.applyBindings(viewModel);
0-100:<input data-bind="value: num1, valueUpdate: 'afterkeydown'"/><br>
0-100:<input data-bind="value: num2, valueUpdate: 'afterkeydown'"/><br>
<span class="validationMessage" data-bind='visible: !isValidSum.isValid(), text: isValidSum.error'></span>