Knockout自定义计算失败验证规则

时间:2014-10-02 07:06:06

标签: javascript validation knockout.js

我已经创建了一个自定义函数,如下所示。它在存储数据和更新可观察的 MetaData 值等时可以实现perfekt,但在验证时会中断。

我正在使用Knockout验证并且已经调试了几个小时,我发现我发现的事实是验证运行了两次,第二次,我的observable的所有规则都已经下降,所以每次可观察是有效的,因为没有规则。后面的代码从源代码复制到此处:https://github.com/Knockout-Contrib/Knockout-Validation/blob/master/Dist/knockout.validation.js

为什么我的自定义函数会使observable丢弃验证规则?

我的自定义功能

ko.observable.fn.valueByKey = function (key) {
    return ko.computed({
        read: function () {
            var md = ko.utils.arrayFirst(ko.unwrap(this), function (item) {
                return item.Key() == key;
            });

            if (md === null) {
                md = new MetaData({ Key: key });
                this.push(md);
            }

            return md.Value();
        },
        write: function (value) {
            var md = ko.utils.arrayFirst(ko.unwrap(this), function (item) {
                return item.Key() == key;
            });

            md.Value(value);
        }
    }, this);
};

运行两次的代码

var h_obsValidationTrigger = ko.computed(function () {
                var obs = observable(),
                    ruleContexts = observable.rules();
                console.log(ruleContexts);
                exports.validateObservable(observable);
                return true;
            });

淘汰赛验证的另一个重要部分js

addRule: function (observable, rule) {
                observable.extend({ validatable: true });

                //push a Rule Context to the observables local array of Rule Contexts
                observable.rules.push(rule);

                return observable;
            },

更新1:

我想出了一个似乎有效的简单解决方案。

ko.observable.fn.valueByKey = function (key) {
    var md = ko.utils.arrayFirst(ko.unwrap(this), function (item) {
        return item.Key() == key;
    });

    if (md === null) {
        md = new MetaData({ Key: key });
        this.push(md);
    }
    return md.Value;
}

使用它时,我会在元素上获得验证消息,但错误计数不会在我的视图模型上出现,因此即使我收到验证错误,它自身的viewmodel仍然有效。

0 个答案:

没有答案