setValidationValues ​​в jquery.validate.unobtrusive не доступен вне файла - PullRequest
4 голосов
/ 25 января 2011

Я расширяю проверку MVC 3 с помощью пользовательских атрибутов ValidationAttributes на стороне сервера и реализовал IClientValidatable для вывода атрибутов данных html5 для своей пользовательской проверки. Затем я использовал jQuery.validator.addMethod для добавления проверки на стороне клиента. Моя последняя задача - написать адаптер, который преобразует атрибуты данных html5 в формат, понятный валидатору jQuery. Моя проверка принимает несколько значений, поэтому мне нужно использовать jQuery.validator.unobtrusive.adapters.add, а не одну из более простых функций, таких как addSingleVal.

В моем адаптере было бы полезно использовать несколько функций в файле jquery.validate.unobtrusive, таких как setValidationValues ​​и getModelPrefix, но если я не ошибаюсь, эти функции находятся внутри замыкания, делая их доступными только в этом замыкании , Я на самом деле не хочу помещать свои пользовательские функции в файл сценария, принадлежащий Microsoft, который может измениться, поэтому, если у кого-то нет идей, я вынужден скопировать эти функции в свой собственный файл, что, очевидно, не идеально.

Так какие-нибудь идеи и что делают другие люди?

1 Ответ

2 голосов
/ 30 января 2011

Боюсь, что нет.
Как вы знаете, эти функции реализованы следующим образом:

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

, пока эта функция определена в закрытой области видимости, вы не можете получить к ней доступ извне, онавид частной функции для класса.Цель определения таких функций заключается в том, что вы не можете получить к ним доступ за пределами области действия.
minifier methods также знает об этом FACT и использует его для максимально возможного сжатия js.если вы посмотрите на минимизированную версию jquery.validate.unobtrusive.min.js, она докажет, что уже нет функции setValidationValues, а (несколько букв) x.

Копирование и вставка для этих функций не составляет большого труда, если они слишком короткие, чтобы беспокоиться об их размерах.С помощью minifier вы можете получить эту функцию и другие 3 другие функции всего за 200 bytes.и этот 200 байт будет использоваться только один раз.


Однако, если вы используете минимизированную версию, вы можете найти имя функции и поместить его в adapter.add(function(){//use their name here}), вы заметите, что копирование и вставка лучше.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...