将敲除验证分组应用于observablearray

时间:2013-11-18 23:43:48

标签: knockout.js knockout-validation

我正在尝试在可观察数组上使用组Knockout Validation。我想只在每个数组项成功验证时启用提交按钮。

我不确定我哪里出错了。任何人都可以建议我是否接近以下?为简洁起见,我删除了与UI其他功能相关的代码,只留下了相关的代码。

我还搜索了Stackoverflow的解决方案,但找不到解决此特定问题的解决方案。

请指教。感谢。

敲除

    ko.validation.configure({
        registerExtenders: true,
        messagesOnModified: true,
        insertMessages: true,
        parseInputAttributes: true,
        messageTemplate: null,
        errorMessageClass: "input-notification error png_bg",
        grouping: {
            deep: true
        }
    });

    function Integer(integerValue) {
        this.integerValue = ko.observable(integerValue).extend({ number: true }).extend({ required: { message: 'Please enter an integer' } });
    }

    var viewModel = ko.mapping.fromJS(integerList, options);

    viewModel.integers = ko.observableArray([
        new Integer("0"),
        new Integer("0")
    ]);

    viewModel.errors = ko.validation.group(viewModel.integerlists);

    ko.applyBindings(viewModel);

HTML

        <div data-bind="template: { name: 'integerTemplate', foreach: integers }"></div>
        <script id="integerTemplate" type="text/html">
            <input class="text-box single-line text-input large-input" type="number" data-bind="value: integerValue, valueUpdate: 'afterkeydown', css: { error: !integerValue.isValid() }" required />
        </script>
        <button class="large-input wide" data-bind="click: save, enable: errors().length == 0">Sort Integers</button>

1 个答案:

答案 0 :(得分:0)

Knockout Validation

如果你正在使用这个看起来像你的库,我建议你编写一个自定义验证器(参见一次性验证器)并将其扩展到你的observableArray。

在这个自定义验证器的内部,你只需循环并检查数组是否有效(没有值为null)