2009-04-27 3 views
4

При выполнении валидации в JavaScript, как сохранить методы проверки, которые должны обрабатывать кучу непредвиденных обстоятельств, стать неуправляемыми?Разработка методов проверки Javascript

Например, у меня есть форма с полем, которое имеет проверку, которая проверяет:

  • это новое значение числа?
  • Является ли значение в другой области на форму> 0, когда текущее поле> 0
  • другого поле на форме == 1 и текущего поля == 0
  • другого поле на форме == истинный и текущее поле Mod другой поле == 0

Etc.

в настоящее время у меня есть метод с кучей если/другое заявления.

Я могу сломать каждый чек в свой собственный метод и назвать его основным методом проверки, но это создаст массу новых методов.

Обновление: независимо от того, использую ли я каркас или отдельные методы, я все еще смирился с тем, что метод проверки вызова заполнен сообщениями If/Else или Switch с предупреждениями о неудачных проверках?

ответ

1

Похоже, что вам может понадобиться рудиментарный конечный автомат. Одна вещь, которую вы могли бы рассмотреть это нарушение валидаторы в простейших формах:

function validator(op, options, pass, fail) { 
    if (op(options)) { 
     pass(options); 
    } else { 
     fail(options); 
    } 
} 

Тогда вы можете приковать их вместе, чтобы сформировать более сложные системы.

function isFooChecked(options) { 
    return $(options.foo).is(':checked'); 
} 

function sayHi(options) { 
    alert('hi ' + options.name); 
} 

function fail(options) { 
    alert(options.name + ' was bad'); 
} 

function validateName() { 
    validator(isFooChecked, { foo: '#someField', name: $('#nameField').val() }, sayHi, fail); 
} 

У вас все еще будет много кода, но если вы сделаете это правильно, функции должны быть небольшими и понятными.

0

Я бы рекомендовал разделить каждую отдельную проверку на свой собственный метод, при этом элементы управления, подлежащие проверке, передаются в качестве аргументов. Таким образом, вы можете легко использовать обычные («новое значение - число?»).

Я не знаю ни малейшего недостатка в том, что у меня большое количество методов в JavaScript (кроме переполнения пространства имен), но я мог чего-то там пропустить.

Конечно, вы также можете ознакомиться с использованием framework of some kind.

0

У меня есть объект JSON, который выглядит как

{'field1': {'rule_name1':{'rule': rule1, 'message': message1}, 
    {'rule_name2':{'rule': rule2, 'message': message2}}, 
    field2: {'rule_name3':{'rule': rule3, 'message': message3}, 
    {'rule_name4':{'rule': rule1, 'message': message1}}, 
    {'rule_name5':{'rule': rule4, 'message': message4}}} 

или, если вы найдете его более читаемым

field1 
    rule_name1 
     rule: rule1 
     message: message1 
    rule_name2 
     rule: rule2 
     message: message2 
field2 
    rule_name3 
     rule: rule3 
     message: message3 
    rule_name4 
     rule: rule1 
     message: message1 
    rule_name5 
     rule: rule4 
     message: message4 

В принципе, у вас есть список полей.Под каждым полем вы найдете список правил, имена которых неактуальны, и для каждого имени правила у вас есть правило и сообщение.

Каждый раз, когда мне нужно проверить поле, я нахожу соответствующий подобъект. Затем я перебираю rule_names, а для rule_name получаю правило и сообщение. Правило соответствует методу, который проверяет поле (например, «notEmpty()»). Поэтому я вызываю метод: если он возвращает true, я переношу итерацию в следующее имя правила. В противном случае я верну сообщение.

Тогда я могу использовать сообщение, как я хочу, в режиме просмотра.

Смежные вопросы