2009-04-27 116 views
4

在JavaScript中进行验证时,如何保持需要处理大量突发事件的验证方法变得不稳定?设计Javascript验证方法

例如,我有与具有验证,检查字段的形式:

  • 是新的值的号码?
  • 是在另一个字段中的值的形式 > 0时,当前场> 0
  • 是对形式== 1和 当前场== 0
  • 另一领域是另一个字段的表单上==真 和当前域是国防部另一 场== 0

等等

目前,我已经得到了一堆if/else语句的方法。

我可以将每个检查分解为它自己的方法,并从主验证方法调用它,但这会创建大量新方法。

更新:无论我使用的是框架还是单个方法,我是否仍然拒绝使用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,则将迭代传递到下一个rule_name。否则,我会返回消息。

然后我可以在视图方法中使用该消息。