我通过在服务器端使用自定义ValidationAttributes来扩展MVC 3验证,并已实现IClientValidatable以输出
html5数据属性以进行自定义验证.然后我使用jQuery.validator.addMethod添加我的客户端验证.我的最后一项任务是编写将html5数据属性转换为jQuery验证器可以理解的格式的适配器.我的验证有几个值,所以我需要使用jQuery.validator.unobtrusive.adapters.add,而不是像addSingleVal这样更直接的函数之一.
在我的适配器中,使用jquery.validate.unobtrusive文件中的几个函数(如setValidationValues和getModelPrefix)会很有用,但如果我没有弄错,这些函数都在一个闭包中,使它们只在该闭包中可用.我真的不想将我的自定义函数放在可能会改变的微软拥有的脚本文件中,所以除非有任何想法,否则我不得不在我自己的文件中复制这些函数,这显然不太理想.
那么任何想法和其他人做什么?
最佳答案 恐怕没有.
如您所知,这些函数的实现如下:
(function ($) {
...
function setValidationValues(options, ruleName, value){
//the implementation
}
...
}(jQuery))
只要在私有范围内定义的此函数无法从外部访问它,它就是类的私有函数.定义这些函数的目的是您不能在范围之外访问它们.
minifier方法也知道这个FACT并使用它来尽可能地压缩js.如果你看一下缩小版本jquery.validate.unobtrusive.min.js它证明自己不再有setValidationValues函数而是(某些字母)x函数.
只要它们太短而无法关注它们的大小,这些功能的复制和粘贴并不是很大.使用minifier,您可以获得此功能和其他3个其他功能,仅200字节.这个200字节只能使用一次.
但是,有一种方法,如果您使用缩小版本,您可以查找函数的名称并将其放在您的adapter.add(function(){//在这里使用他们的名字}),你会发现复制和粘贴是更好.