我正在使用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();
});
答案 0 :(得分:3)
问题是你的扩展器没有返回任何可观察的内容。来自the documentation on extending observables:
然后它可以返回observable或返回新的东西 就像一个计算的observable,它以某种方式使用原始的observable。
所以你应该将problaby添加以下行作为扩展器中的最后一行代码(除非你想返回一个不同的可观察对象,在这种情况下你当然应该这样做):
return target;