数组中重复条目的自定义验证规则问题

时间:2012-10-20 12:33:09

标签: javascript jquery validation knockout.js knockout-validation

我正在尝试使用knockout.validation插件。我想创建一个自定义验证规则,用于在数组中输入时检查重复的数组项。我试过这个:

ko.validation.rules['duplicate'] = {
    validator: function (val1, val2) {

    },
    message: 'The value is already exist'
};

ko.validation.registerExtenders();

此处val1是数组,val2是使用extend方法传入的参数。问题是,我不知道如何从自定义验证功能访问数组中当前输入的项目。请帮帮我?

1 个答案:

答案 0 :(得分:1)

如果你扭转问题,它会更好。将验证添加到您要添加的文本observable(或一个可观察对象,如果涉及多个字段)。然后,当您触发添加时,检查observable是否有效。如果它有效,则将其添加到数组中。

http://jsfiddle.net/jearles/XY9XH/

-

<span>New Item: <input data-bind="value:newItem" /> <button data-bind="click: addItem">Add</button></span>
<div data-bind="foreach: items">
    <span data-bind="text: $data"></span>
</div>​

-

ko.validation.rules['duplicate'] = {
    validator: function (item, array) {
        return array.indexOf(item) == -1;
    },
    message: 'Value already exists!'
};
ko.validation.registerExtenders();

var ViewModel = function() {
    var self = this;
    self.items = ko.observableArray();
    self.newItem = ko.observable().extend({duplicate: self.items});
    self.addItem = function() {
        if (self.newItem().length > 0 && self.newItem.isValid()) {
           self.items.push(self.newItem());
           self.newItem(null);
        }
    };
}

ko.applyBindings(new ViewModel());