Разработка методов проверки Javascript - PullRequest
4 голосов
/ 27 апреля 2009

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

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

  • это новое значение число?
  • Значение в другом поле на форма> 0, когда текущее поле> 0
  • Это другое поле в форме == 1 и текущее поле == 0
  • Это другое поле в форме == true а текущее поле мод другое поле == 0

Etc.

В настоящее время у меня есть метод с кучей операторов if / else.

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

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

Ответы [ 4 ]

3 голосов
/ 27 апреля 2009

Зачем изобретать велосипед? Я бы предложил плагин проверки jQuery . Проверьте также демонстрационные страницы

1 голос
/ 27 апреля 2009

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

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 голосов
/ 19 января 2010

У меня есть объект 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

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

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

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

0 голосов
/ 27 апреля 2009

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

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

Конечно, вы также можете захотеть использовать фреймворк какого-то вида .

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