1

我有一个功能:

    validatorsString.replace(/([\w_$]+)\(([\w_$,]+)\)/g, (all, fn, args) ->
      args = args.split ','
      if typeof validatorsObject[fn] is 'function'
        res = validatorsObject[fn].apply validatorsObject, args
        if res == false
          formBox.addError obj, "Pole musi byc takie"
          return false
          #obj.css "background-color", "red"
    )

如果一切都好,我想做点什么。上面的函数正在调用验证器(1,3,10),如果每个验证器都返回 true,我想发送 ajax。这个怎么做 ?

4

2 回答 2

2

如果您保留运行验证器和在单独的函数中更新视图的逻辑,我认为您将来会保持它更清洁。然后,你可以这样写:

isValid = (validationString) ->
  re = /([\w_$]+)\(([\w_$,]+)\)/g
  while match = re.exec(validationString)
    [fn, args] = [match[1], match[2].split(',')]
    if _(validatorsObject[fn]).isFunction() and not validatorsObject[fn].apply validatorsObject, args
      return false
  true

unless isValid(validationString)
  formBox.addError obj, "Pole musi byc takie"

我使用 underscore.js 来检查验证器的类型,因为我相信typeof像您的代码中的检查在 Android 2.3 股票浏览器上会失败。一些值得深思的食物。

于 2013-06-17T20:54:46.123 回答
1

您需要保持“全局状态”

isValid = true

validatorsString.replace(/([\w_$]+)\(([\w_$,]+)\)/g, (all, fn, args) ->
  return unless isValid # short-circuit if we detected an error already
  args = args.split ','
  if typeof validatorsObject[fn] is 'function'
    res = validatorsObject[fn].apply validatorsObject, args
    isValid = false unless res

unless isValid
  formBox.addError obj, "Pole musi byc takie"
  #obj.css "background-color", "red"
  return false

$.post "stuff"
于 2013-06-17T20:28:23.633 回答