knockout.validaton Remove validation rule

by jspradlin

HTML

<script src="http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-2.0.0.js"></script>
<script src="https://raw.github.com/ericmbarnard/Knockout-Validation/master/Src/knockout.validation.js"></script>
<script src="https://raw.github.com/carlschroedl/validatedviewmodel/master/ValidatedViewModel.js"></script>
<p>Fiddle for <a href="https://github.com/carlschroedl/validatedviewmodel/issues/1"
    target="_blank">https://github.com/carlschroedl/validatedviewmodel/issues/1</a>

</p>
<div>Address Type:</div>
<input data-bind="checked: addressType" type="radio"
value="dhcp" name="addressType" id="radio-dhcp">
<label for="radio-dhcp">DHCP</label>
<br/>
<input data-bind="checked: addressType" type="radio" value="static" name="addressType"
id="radio-static">
<label for="radio-static">Static</label>
<br>
<div>using static: <span data-bind="text: usingStatic"></span>

</div>
<div data-bind="visible: usingStatic">Static IP:
    <input data-bind="value: staticIp" type="text">
    <br />Static Net Mask:
    <input data-bind="value: staticNetmask" type="text">
    <br />Static Gateway:
    <input data-bind="value: staticGateway" type="text">
</div>
<button data-bind="click: handleClick">Test</button>

CSS

.error {
    background-color: red;
    color: white;
    margin: 0 5px;
    padding: 0 5px;
}

JavaScript

ko.validation.configure({
    registerExtenders: true, //default is true
    messagesOnModified: true, //default is true
    insertMessages: true, //default is true
    parseInputAttributes: true, //default is false
    writeInputAttributes: true, //default is false
    messageTemplate: null, //default is null
    decorateElement: true, //default is false. Applies the .validationElement CSS class
    errorElementClass: 'error',
    errorMessageClass: 'error'
});

var settings = {
    // TODO: verify that this is a good enough regex for IP and netmask
    ipRegEx: /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,
    netMaskRegEx: "((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}0"
}

var NetworkConfig = new ValidatedViewModel(function () {
    var self = this;

    self.addressType = ko.observable("static");

    self.usingStatic = ko.computed(function () {
        return self.addressType() == "static";
    });

    self.staticIp = ko.observable();

    self.staticNetmask = ko.observable();

    self.staticGateway = ko.observable();

    // Validation constraints
    self.constraintGroups = {
        basic: {
            addressType: {
                required: true,
                message: 'Address Type is required'
            }
        },

        staticAddress: {
            staticIp: {
                required: {
                    message: 'IP Address is required'
                },
                pattern: {
                    message: 'Must be a valid IP address',
                    params: settings.ipRegEx
                }
            },

            staticNetmask: {
                required: {
                    message: 'Net Mask is required'
                },
                pattern: {
                    message: 'Must be a valid net mask',
                    params: settings.netMaskRegEx
                }
            },

            staticGateway: {
                required: {
                    message: 'Gateway Address is required'
                },
...