0

所以,这是我这几天一直面临的问题。

我有一个 durandal 应用程序,我想在控件上应用 ko 验证。现在,验证确实得到应用,但问题是它在第一次加载时不会生效。例如,如果我有一个需要设置为 true 的文本框并且在加载时,此文本框是空的,KO 不显示所需的消息。

它仅在我在文本框中输入内容时显示消息,然后移出文本框,再次进入文本框,删除数据,然后再次移出文本框。

我什至尝试在 div 标签内的 HTML 中添加 ko.validation.init({messagesOnModified: false}) 和验证选项。

但没有影响。

下面是我的代码

define(function (require) {
 ko.validation.init({
    messagesOnModified: false        
});
var duration = ko.observable().extend({
    required: { message: 'Please enter valid number.' }, number: true
});
var email = ko.observable().extend({ email: true, required: true });

var vm = {
    duration: duration,
    email: email

};
vm["errors"] = ko.validation.group(vm);
return vm;
});

HTML 代码

            <span data-bind="text: errors().length"></span> Errors

            <div>
                <label for="txtDuration">Duration</label>
                <input name="txtDuration" type="text" data-bind="value: duration" />
                <span>(Min)</span>
            </div>
            <div>
                <label for="txtEmail">Email</label>
                <input name="txtEmail" type="text" data-bind="value: email" />
            </div>
            <input type="submit" value="Submit" data-bind="enable: isValid()">

    </form>

请帮忙。

4

2 回答 2

4

验证问题列表中的此问题描述了行为:https ://github.com/Knockout-Contrib/Knockout-Validation/issues/211 。

建议的解决方法:

使用vm.name.isModified(true)vm.name.valueHasMutated()触发更新。http://jsfiddle.net/RainerAtSpirit/v6dek/6/

ko.validation.init({

    messagesOnModified: false
});

var vm = {
    name: ko.observable().extend({
        required: true
    })
};
vm.name.isModified(true) // or alternatively vm.name.valueHasMutated();
ko.applyBindings(vm);
于 2013-06-11T09:12:16.103 回答
2

您必须使用验证组和 showAllMessages

http://jsfiddle.net/U3QZU/1/

this.errors = ko.validation.group(this);
this.errors.showAllMessages();
于 2013-06-11T08:43:23.657 回答