gpt4 book ai didi

knockout.js - knockout 映射验证

转载 作者:行者123 更新时间:2023-12-03 12:09:27 25 4
gpt4 key购买 nike

我正在尝试将验证附加到映射 View 。
我正在使用Knockout映射和验证插件。
伪模型:

Person {
int Id;
string Name;
Book[] Books;
}

Book {
int Id;
string Name;
}

Javascript:
function viewModel() {
var self = this;
self.persons = ko.observableArray();

// persons are retrieved via AJAX...
ko.mapping.fromJS(persons, {}, self.persons);
}

jQuery(function( $ ) {
ko.applyBindings(new viewModel());
});

如何扩展人员observableArray设置验证规则和消息?
我需要验证人员和书籍子数组属性。
我发现只有使用显式模型设置的示例,没有自动映射,例如:
Name: ko.observable().extend({ required: true })

然后,我需要设置ko.validatedObservable,isValid和validation.init,但是我真的不知道如何处理/组织它。您能提供一些帮助吗?

最佳答案

我发现至少有两种方法可以为通过ko.mapping插件创建的模型对象或模型对象提供验证:

  • 创建某些属性时,使用映射选项附加验证规则
  • HTML5属性。仅某些验证(即必需的,模式)支持此功能。有关详细信息,请参见documentation for the Knockout-Validation plugin

    以上两种技术也可以组合。有关示例,请参见以下fiddle

    1.使用映射选项

    Knockout Mapping插件允许在要自定义的映射对象上创建某些属性。利用此功能,您可以覆盖插件的默认行为并为映射的属性添加验证。下面是一个例子

    HTML
    <input data-bind="value: name" />

    Javascript
    var data = { name: "Joe Shmo" };

    var validationMapping = {
    // customize the creation of the name property so that it provides validation
    name: {
    create: function(options) {
    return ko.observable(options.data).extend( {required: true} );
    }
    }
    };

    var viewModel = ko.validatedObservable(ko.mapping.fromJS(data, validationMapping));
    ko.applyBindings(viewModel);

    2. HTML5属性

    Knockout Validation插件支持可在HTML控件中使用的一组有限的HTML5验证属性。但是,使用它们需要启用parseInputAttributes选项。这是一个简单的示例:

    HTML
    <input data-bind="value: name" required />

    Javascript
    // this can also be configured through the "validationOptions" binding (https://github.com/ericmbarnard/Knockout-Validation/wiki/Validation-Bindings)
    ko.validation.configure({
    parseInputAttributes: true
    });

    var data = { name: "Joe Shmo" };

    var viewModel = ko.validatedObservable(ko.mapping.fromJS(data));
    ko.applyBindings(viewModel);

  • 关于knockout.js - knockout 映射验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13933401/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com