我正在寻找一种方法来在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