我正在尋找一種方法來在CFC中動態聲明表單默認值,我通過AJAX調用。當前的CFC發送訂單,我需要分解成子訂單。如何在ColdFusion CFC中聲明動態表單域默認值?
我一直在使用這樣的:
<!--- static defaults --->
<cffunction name="Defaults" access="public" returntype="struct" output="false"
hint="Assign default values to instance">
<cfscript>
var formDefaults = {
versenden=""
, speichern=""
...
}
</cfscript>
<cfreturn formDefaults />
</cffunction>
<cffunction name="Commit" access="public" returntype="struct" output="false" hint="database handler">
<!--- add dynamic form fields --->
<cfscript>
var LOCAL = {};
variables.defs = THIS.Defaults();
</cfscript>
<cfloop collection="#VARIABLES.Instance.FormData#" item="formField">
<cfscript>
if ( LEFT(formField, 5) EQ "MENGE"
OR LEFT(formField, 3) EQ "EAN"
OR LEFT(formField, 12) EQ "BESTELL_TEXT"
OR LEFT(formField, 10) EQ "BESTELLTYP"
...
) {
variables.defs[formField]="";
}
</cfscript>
</cfloop>
<cfscript>
structAppend(variables.defs, VARIABLES.Instance.FormData);
LOCAL.Basket = variables.defs;
</cfscript>
...
所以我首先聲明靜態表單域(單實例只),然後嘗試動態表單域動態地追加到我的數組,這可能會被轉移多次(MENGE38, MENGE39, MENGE40
等)
雖然這個工程確定,我需要另一個計數元素添加到我的形式,名稱,所以我將不得不改變MENGE
喜歡的東西counter.MENGE
或MENGE.counter
然後將發送表單值這樣的:
MENGE.1.38
MENGE.1.40
MENGE.1.41
MENGE.2.37
用計數器表示子順序,該字段用於。
問題是,這打破了我的動態表單字段聲明,我不明白爲什麼。我收到以下錯誤:
Diagnose: Element MENGE.1 is undefined in a CFML structure referenced as part of an expression.
問:
誰能給我什麼問題可能是一個暗示?我是否也必須在HTML頁面上配置表單域(不應該)?
謝謝!
編輯:
問題是在我的驗證功能,我還需要聲明我在上面做了修改。新功能如下:
<cffunction name="Validate" access="public" returntype="array" output="false" hint="validate form inputs and return an array of faulty field names.">
<cfscript>
var LOCAL = {};
var double = structNew();
double.form = VARIABLES.Instance.FormData;
double.criteria = VARIABLES.Instance.Validation;
</cfscript>
<!--- add dynamic form fields for validation... I FORGOT TO UPDATE THIS--->
<cfloop collection="#VARIABLES.Instance.FormData#" item="formField">
<cfscript>
if ( LEFT(formField, 5) EQ "MENGE"
OR LEFT(formField, 10) EQ 'BESTELLTYP'
OR LEFT(formField, 3) EQ "EAN"
OR LEFT(formField, 12) EQ "BESTELL_TEXT"
...
) {
VARIABLES.Instance.Validation[formField]="pass";
}
</cfscript>
</cfloop>
<!--- Get error names and type --->
<cfinvoke component="form_validate" method="validate_fields" double="#double#" returnvariable="validation_errors"></cfinvoke>
<cfset LOCAL.ErrorMessages = validation_errors />
<cfreturn LOCAL.ErrorMessages />
因爲我沒有在這個函數中添加新的更新,如果從句,我得到的錯誤。
我認爲問題是由於您使用句點作爲表單字段名稱的一部分而引起的。這阻止每個領域是一個簡單的元素。如果使用下劃線會發生什麼? – 2013-02-24 13:53:49