我通过在服务器端使用自定义 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))
只要这个函数定义在私有(private)范围内,你就不能从外部访问它,它是类的私有(private)函数。定义此类函数的目的是您不能在范围之外访问它们。
minifier 方法
也知道这个 FACT
并用它来尽可能地压缩 js。如果你看一下缩小版本jquery.validate.unobtrusive.min.js
,它证明不再有setValidationValues
函数,而是(一些字母)x
函数。
对于这些函数来说,复制和粘贴并不是什么大问题,只要它们太短而无需关心它们的大小。使用 minifier,您只需 200 字节
即可获得此函数和其他 3 个函数。并且这 200 字节只会使用一次。
adapter.add(function(){//在此处使用它们的名称})
,您会发现复制和粘贴效果更好。
关于jquery - jquery.validate.unobtrusive 中的 setValidationValues 在文件外部不可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4793016/