2009-04-27 77 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。否則,我會返回消息。

然後我可以在視圖方法中使用該消息。