jquery.validate.unobtrusive中的setValidationValues在文件外不可用?

时间:2011-01-25 11:35:40

标签: jquery asp.net-mvc-3 unobtrusive-javascript jquery-validate

我通过在服务器端使用自定义ValidationAttributes来扩展MVC 3验证,并已实现IClientValidatable以输出html5数据属性以进行自定义验证。然后我使用jQuery.validator.addMethod添加我的客户端验证。我的最后一项任务是编写将html5数据属性转换为jQuery验证器可以理解的格式的适配器。我的验证有几个值,所以我需要使用jQuery.validator.unobtrusive.adapters.add,而不是像addSingleVal这样更直接的函数之一。

在我的适配器中,使用jquery.validate.unobtrusive文件中的几个函数(例如setValidationValues和getModelPrefix)会很有用但如果我没有弄错,这些函数都在一个闭包中,使它们只在该闭包内可用。我真的不想将我的自定义函数放在可能会改变的微软拥有的脚本文件中,所以除非有任何想法,否则我不得不在我自己的文件中复制这些函数,这显然不太理想。

那么任何想法以及其他人做了什么?

1 个答案:

答案 0 :(得分:2)

我不敢 如您所知,这些函数的实现如下:

(function ($) { 
   ...  
   function setValidationValues(options, ruleName, value){
      //the implementation 
   }
   ...  
}(jQuery))

只要在私有范围内定义的此函数无法从外部访问它,它就是类的私有函数。定义这类函数的目的是您不能在范围之外访问它们 minifier methods也知道这个FACT并使用它来尽可能地压缩js。如果您查看缩小版本jquery.validate.unobtrusive.min.js,它会证明自己不再有setValidationValues函数,而是(某些字母)x函数。

这些功能的复制和粘贴并不是很大,只要它们太短而不能关注它们的尺寸。使用minifier,您可以只使用200 bytes获得此功能和其他3个其他功能。这个200字节只能使用一次。

<小时/> 但是,有一种方法,如果您使用缩小版本,您可以查找函数名称并将其放在adapter.add(function(){//use their name here})中,您会注意到复制和粘贴更好。

相关问题