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

标签 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)会很有用,但如果我没有记错的话,这些函数位于一个闭包内,使得它们只能在该闭包内使用。我真的不想将我的自定义函数放在可能会更改的微软拥有的脚本文件中,因此除非有人有任何想法,否则我被迫将这些函数复制到我自己的文件中,这显然不理想。

那么有什么想法以及其他人做了什么吗?

最佳答案

恐怕不是。
如您所知,这些功能是这样实现的:

(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/

相关文章:

javascript - 我可以强制 jQuery 使用 Sizzle 来评估选择器而不使用非标准选择器吗?

javascript - jquery 鼠标移动在触摸设备上不起作用

javascript - 无法将值传递回 HTML 页面

javascript - 提交时不传递表单中隐藏的 div 标记的值

nhibernate - ASP.NET MVC 中的 AutoMapper 更新操作

jquery - 在 MVC 3 中,如果不显眼的验证无效则显示 div,如果有效则隐藏它

c# - 如何携带在 Asp.net MVC 中选择的下拉值

html - 以下 CSS 和 HTML 有什么问题?

unobtrusive-javascript - 不显眼的 Javascript onclick

javascript - 带有 jsf 组件的不显眼的 javascript ...怎么样?