2013-05-26 50 views
0

我在我的HTML是這樣的:的CoffeeScript從字符串執行功能與參數

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

功能:長度,NOTNULL和鏈接都在我的驗證類。 我得到這些功能與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),但現在我想用的參數。 如何檢查是否這些功能存在於類以及paramters執行它(有沒有限制,可以是1,5,10個PARAMS)

回答

3

既然你不能動態地參數調用函數的字符串(除非您使用eval),最好的方法達到你想要你就必須分析你的data-validation信息的功能:

給出此字符串:

validatorsString.replace(/([\w_$]+)\(([\w_$,]+)\)/g, (all, fn, args) -> 
    args = args.split ',' if args 
    if typeof validatorsObject[fn] is 'function' 
    validatorsObject[fn].apply validatorsObject, args 
) 
validatorsString="length(5,25);notNull();links(1);",你可以使用正則表達式解析成函數名和參數
+0

非常感謝,完美的作品! – mitch