从可观察的移动验证,计算(Move validation from observable to co

2019-10-18 17:32发布

我有一个将数字格式的自定义扩展KO,此扩展包在计算原来的观察到的,返回新参考计算。

这里有一个问题,可以说下来之前数扩展器被称为有人添加了一个验证,以可观察到的外链,那么这个验证不会当计算由数字扩展暴露工作。

我可以以某种方式从可观察验证移动计算的?

关当然,我可以请确保验证的数量扩展后添加,但并不觉得很扎实,尤其不要在一个大项目

扩展器看起来像

ko.extenders.asNumber = function (target) {
    var result = ko.computed({
        read: function () {
            return Globalize.format(target(), "N2");
        },
        write: function (value) {
            if (value != null && value.substr) {
                var parsedValue = Globalize.parseFloat(value);
                if (isNaN(parsedValue)) {
                    parsedValue = value;
                }
                value = parsedValue;

                if (!String.hasValue(value))
                    value = null;
            }

            target(value);
            target.valueHasMutated();
        }
    });

    target.hasValue = function () {
        return target() != null && target() != 0;
    };
    result.raw = target;
    return result;
};

更新:

解决它的方法之一

function copyValidation(observable, newObservable) {
    if (observable.__valid__) {
        newObservable.extend({ validatable: true });
        ko.utils.arrayForEach(observable.rules(), function(rule) {
            newObservable.rules.push(rule);
        });
        observable.rules([]);
    }
}

最终版本

如果没有人有一个更好的办法,我会去为这

function moveValidation(observable, newObservable) {
    if (observable.__valid__) {
        newObservable.extend({ validatable: true });
        ko.utils.arrayForEach(observable.rules(), function(rule) {
            newObservable.rules.push(rule);
        });
        observable.extend({ validatable: false });
    }
}

更新

上面溶液observable.extend({ validatable: false }); 确实由于某些原因,一旦你捆绑,然后再缩小你的脚本不能正常工作。 observable.rules([]); 作品

文章来源: Move validation from observable to computed