敲除验证是否会影响自定义扩展程序?

时间:2014-02-28 14:14:07

标签: validation knockout.js knockout-validation

我正在使用KnockoutJS 2.2.1以及Knockout-Validation。 是否存在验证和创建自定义扩展程序之间存在干扰的已知错误?

因为不知何故我无法添加我的自定义扩展程序。 当我尝试运行此代码时:

self.from = ko.observable(new Date()).extend({ reportDate: { timeZoneValue: self.timeZoneValue} });

其中reportDate是我的扩展器,淘汰验证似乎有问题,他找不到“未定义的规则”

  

未捕获的TypeError:无法读取未定义的属性“规则”

有人有这个问题吗?怎么解决?

以下是reportDate扩展程序的代码:

ko.extenders.reportDate = function (target, options) {
var lastValidValue = new Date();

target.subscribe(function (newValue) {
    if (newValue == null) {
        target(lastValidValue);
    } else {
        lastValidValue = newValue;
    }
    var isoDate = moment(DateProvider.adjustDateFromTimeZoneToUtc(target(), options.timeZoneValue())).toISOString();
    target.ISODateString = isoDate;
});

};

我也想知道敲门验证的自定义规则是否会破坏某些内容。特别是registerExtenders()函数,这对我来说并不清楚它是什么。

$(function () {
ko.validation.init({
    insertMessages: true,
    decorateElement: true,
    errorElementClass: "error",
    errorMessageClass: "validation-message",
    grouping: { observable: true, deep: true }
});

ko.validation.registerExtenders();

});

1 个答案:

答案 0 :(得分:3)

问题是你的扩展器没有返回任何可观察的内容。来自the documentation on extending observables

  

然后它可以返回observable或返回新的东西   就像一个计算的observable,它以某种方式使用原始的observable。

所以你应该将problaby添加以下行作为扩展器中的最后一行代码(除非你想返回一个不同的可观察对象,在这种情况下你当然应该这样做):

return target;