CoffeeScript从带有参数的字符串执行函数

时间:2013-05-26 14:33:49

标签: javascript forms coffeescript

我的html中有这样的东西:

<input type="text" data-validators="length(5,25);notNull();links(1);" />

函数:length,notNull和links在我的Validation类中。 我正在使用jQuery

获取这些函数
  $(this).find('[data-validation]').each ->
    validatorsString = $(this).attr "data-validation"
    validatorsArray = validatorsString.split ";"
    validatorsObject = new Validation($(this).val())
    for v in validatorsArray
      if typeof validatorsObject[v] == "function"
        validatorsObject[v]

当我不使用参数(arg1,arg2)但现在我想使用参数时,这工作正常。 如何检查这些函数是否存在于类中并使用参数执行(没有限制,可以是1,5,10个参数)

1 个答案:

答案 0 :(得分:3)

由于您无法使用参数作为字符串动态调用函数(除非您使用eval),实现您希望的功能的最佳方法是您必须解析data-validation信息:< / p>

给定此字符串:validatorsString="length(5,25);notNull();links(1);",您可以使用正则表达式将其解析为函数名和参数:

validatorsString.replace(/([\w_$]+)\(([\w_$,]+)\)/g, (all, fn, args) ->
  args = args.split ',' if args
  if typeof validatorsObject[fn] is 'function'
    validatorsObject[fn].apply validatorsObject, args
)
相关问题