我正在尝试扩展kendo.ui.validator(类似于jQuery验证器) 我重写日期函数,但我应该使用相同的逻辑重载mvcdate函数。覆盖日期函数被调用并正确运行。
我不想复制和粘贴,所以尝试从mvcdata覆盖中调用覆盖的数据函数,但没有成功。语法是this.rules.date(input)
我在javascript OOP部分是初学者,所以我不知道我在做什么,虽然我的语法似乎是合理的。我错过了什么?
(function ($, kendo) {
$.extend(true, kendo.ui.validator, {
rules: {
date: function (input) {
if (input.is("[data-val-date]")) {
var value = input.val();
var check = false;
//var m = moment(value.toString(), "YYYY-MM-DD HH:mm:ss", true);
var m = moment(value.toString(), defaultJavaScriptDateFormat, true);
check = m.isValid();
//var message = "";
//if (!check) {
// message = "Invalid " + m.invalidAt() + ". Please enter a correct date";
//}
//input.attr("data-val-date", message);
return !input.is("[data-val-required]") || check;
}
return true;
},
mvcdate: function (input) {
// Here I try to call the overrided date function to prevent copy and paste, this cause runtime error in chrome:
return this.rules.date(input);
}
},
messages: {
date: function (input) {
return input.attr("data-val-date");
}
}
});
})(jQuery, kendo);
答案 0 :(得分:1)
您可以使用直接方法调用来访问您的函数:
mvcdate: function (input) {
return kendo.ui.validator.rules.date.call(this, input);
}
如果kendo.ui.validator
是使用new
关键字创建的对象的实例,而您的date
函数是原型的一部分,则可以使用原型调用它:
mvcdate: function (input) {
return kendo.ui.validator.prototype.rules.date.call(this, input);
}